From owner-freebsd-ports@FreeBSD.ORG Sat Jan 25 08:33:44 2014 Return-Path: Delivered-To: ports@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id C5D8ABBA for ; Sat, 25 Jan 2014 08:33:44 +0000 (UTC) Received: from onlyone.friendlyhosting.spb.ru (onlyone.friendlyhosting.spb.ru [IPv6:2a01:4f8:131:60a2::2]) by mx1.freebsd.org (Postfix) with ESMTP id 578B91B73 for ; Sat, 25 Jan 2014 08:33:44 +0000 (UTC) Received: from lion.home.serebryakov.spb.ru (unknown [IPv6:2001:470:923f:1:c031:70cd:3c9f:30e4]) (Authenticated sender: lev@serebryakov.spb.ru) by onlyone.friendlyhosting.spb.ru (Postfix) with ESMTPSA id 8FE664AC2D; Sat, 25 Jan 2014 12:33:42 +0400 (MSK) Date: Sat, 25 Jan 2014 12:33:34 +0400 From: Lev Serebryakov Organization: FreeBSD Project X-Priority: 3 (Normal) Message-ID: <7210367408.20140125123334@serebryakov.spb.ru> To: Boris Samorodov Subject: Re: Is it Ok to write files into ${STAGEDIR}/${PREFIX} on "build" stage? In-Reply-To: <52E295E9.6080406@passap.ru> References: <1731518990.20140120000401@serebryakov.spb.ru> <52E295E9.6080406@passap.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Cc: ports@FreeBSD.org X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list Reply-To: lev@FreeBSD.org List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Jan 2014 08:33:44 -0000 Hello, Boris. You wrote 24 =D1=8F=D0=BD=D0=B2=D0=B0=D1=80=D1=8F 2014 =D0=B3., 20:33:45: >> I'm writing port, which has complex, multi-stage build. In the middle = ofg >> build some files should be installed into some directory with exactly s= ame >> structure, as final result -- some ${TEMPROOT}/${PREFIX}. I could create >> special place for files, and in "do-install" simple do "tar -cf - -C >> ${TEMPROOT} . | tar -xf - -C ${STAGEDIR}" -- it will be correct install= to >> stage dir for this port. But it looks strange -- to have two copies of = all >> final files. >>=20 >> Now I'm using ${STAGEDIR}/${PREFIX} instead of ${TEMPROOT}/${PREFIX} = and >> it works nicely -- do-install: becomes no-op, everything is in-place a= nd >> port doesn't spent another 250MiB of disk place. >>=20 >> But, maybe, I don't something significant flaw in this approach and i= t is >> bad idea? BS> This is a bad idea in general. And if you try to test the port then at BS> stage time you should get an error like "the the file system touched BS> before the stage phase". I didn't get any errors, it works like a charm, with all "make install" / "make deinstall" and "make package" as user and other stuff. Only problem, that "check-orphan" complains about *.info files not in pkg-plist, but it looks like bug in "check-orphan", as I have all *.info in INFO Makefile variable and, again, install/deinstall and package works and there are not orphan files, target filesystem is exactly the same after "sudo make install deinstall" or "sudo pkg add ${package} && sudo pkg delete ${package}". Oh, yes, other problem, that *.info files are installed to real system even if OPTIONS_UNSET=3DDOCS / NOPORTDOCS=3Dyes is used, so interaction be= tween staging and INFO variables is broken in some way (and portlint insists, that putting info files into pkg-plist is bad idea). BS> Those stages are: BS> 1. fetch, ...; BS> 2. build; BS> 3. stage (install to a STAGEDIR); BS> 4. actual install (to PREFIX). BS> Our staging allows having a full install at STAGEDIR but doing BS> a partially install to PREFIX. I.e. DOCS, EXAMPLES, NLS, etc. may be BS> installed to real filesystem (PREFIX) only if an appropriate option is BS> checked up. In the future this allows us to get different binary BS> packages (libs-*, bin-*, what_you_like-*) from one source (STAGEDIR). How this contradict with putting file to ${STAGEDIR}${PREFIX} before "stage" phase (I don't like word "stage" instead of "phase" here due to obvious reason)? Now my port does all "installation" (from upstream software point of view) into ${STAGEDIR}${PREFIX} at port build phase ("do-build" target from port's Makefile point of view), "stage" phase (really "do-install" target from port's Makefile point of view) is no-op, and it works! BS> And yes, this system has a drawback. If you write an application only BS> for FreeBSD, it is a monolith one (no docs, examples, etc.) and you BS> use only ports system (no packages) then you'll get your application BS> duplicate disk consumption (at stage/install phase). I have docs, examples, etc. And use packages. It works. It supports NOPORTDOCS / NOPORTEXAMPLES properly in all cases. I could send port prototype to you to examine. --=20 // Black Lion AKA Lev Serebryakov