From owner-freebsd-ports@FreeBSD.ORG Mon Mar 29 07:58:20 2010 Return-Path: Delivered-To: ports@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E516E106564A for ; Mon, 29 Mar 2010 07:58:19 +0000 (UTC) (envelope-from matthias.andree@gmx.de) Received: from mail.gmx.net (mail.gmx.net [213.165.64.20]) by mx1.freebsd.org (Postfix) with SMTP id 4EF1F8FC0C for ; Mon, 29 Mar 2010 07:58:18 +0000 (UTC) Received: (qmail invoked by alias); 29 Mar 2010 07:58:18 -0000 Received: from g229209220.adsl.alicedsl.de (EHLO mandree.no-ip.org) [92.229.209.220] by mail.gmx.net (mp005) with SMTP; 29 Mar 2010 09:58:18 +0200 X-Authenticated: #428038 X-Provags-ID: V01U2FsdGVkX1+l14tbwW2lY6MlvrUPp8ey94tpRY5yvd0j4lmQ6G TJoyBM/eUoOyKX Received: from merlin.emma.line.org (localhost [127.0.0.1]) by merlin.emma.line.org (Postfix) with ESMTP id E5E5B94345; Mon, 29 Mar 2010 09:58:15 +0200 (CEST) Content-Type: text/plain; charset=utf-8; format=flowed; delsp=yes To: "FreeBSD Ports" References: <7d6fde3d1003272314r25305a39mce9893e07453ef90@mail.gmail.com> Date: Mon, 29 Mar 2010 09:58:15 +0200 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: "Matthias Andree" Organization: Message-ID: In-Reply-To: <7d6fde3d1003272314r25305a39mce9893e07453ef90@mail.gmail.com> User-Agent: Opera Mail/10.10 (Linux) X-Y-GMX-Trusted: 0 X-FuHaFi: 0.48999999999999999 Cc: Garrett Cooper Subject: Re: [RFC] deprecate @exec and @unexec in plists in favor of pre-install and post-install scripts X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Mar 2010 07:58:20 -0000 Am 28.03.2010, 08:14 Uhr, schrieb Garrett Cooper: > Hi, > As part of taking a look at the differences in our implementation > of pkg_install(1) in order to afford an improvement over the existing > code, I've looked at various implementations of pkg_install, one being > NetBSD's evolution [1]. It's several years ahead from our's and while > I don't believe that all of the complexity is desired, there's a lot > of good lessons to be learned from this. One of which is that they > replaced the @exec and @unexec calls with string pre-install // > post-install and pre-deinstall // post-deinstall scripts. I think that > this potentially is a good step forward because it takes some of the > guts out of the +CONTENTS files and places it in [bourne shell] > scripts, which are easier to maintain and potentially understand. > I realize that some of the loss would be that one couldn't simply > specify things like %f, %D, %F, etc with @exec and @unexec, but that > seems a small price to pay for tuning everything a bit more. On the > plus side too, that means that one could use an extensive set of > shell, etc libraries that would avoid code duplication like what's > present in the +CONTENTS files. This is one of the small observations > I made after starting on work which would modify 1k python ports to > not install the byte-compiled or optimized files (side topic that we > can talk about in another thread if desired). > Thoughts? Hi Garrett, I'm not so sure what the advantage would be. For trivial pre-post-(de)install tasks, why use a separate script? It's less concise than reading everything in pkg-plist. WRT variables, I'm not so concerned about %D %F etc, but I am concerned about the necessity to add script boilerplate (such as snatching pre-post or deinstall-install modes, prefix), and while I haven't thoroughly audited the install scripts in ports, I see lots of bad shell scripts around. These would need rigorous audits (in adverse conditions, such as paths containing blanks and shell meta characters to unveil underquoted parameters/variables). Also, this effort alone isn't any help in reducing code duplication, as in my perception the duplication is between Makefile (for port install) and pkg-plist/pkg-install (for packages). There often is some line similar to ${SETENV} PKG_PREFIX="${PREFIX}" ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL in the ports' Makefiles (post-install or whereever appropriate). Also, this would need excellent documentation. RPM on Linux is similarly flexible, but is severely underdocumented (at least RPM v3 and v4 on openSUSE Linux are). If it does any _undocumented_ magic, I don't want it. :) So, before we think about it and harrass hundreds of ports maintainers, we'd need the shell script library in place to make it a selling point for actually using install scripts; at that point we can re-think about moving stuff out of pkg-plist into pkg-install scripts. At the *same* time (so that only one edit cycle is needed for affected ports - and I'd suggest a survey to see how many, hundreds probably), we should consider making Mk/bsd.port.mk call the install scripts automatically (needs changes to hundreds of ports again) in pre-install, post-install and related stages. HTH -- Matthias 'mandree@' Andree FreeBSD ports committer