Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:74533 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 50729 invoked from network); 27 May 2014 16:58:11 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 27 May 2014 16:58:11 -0000 Authentication-Results: pb1.pair.com header.from=mike.php.net@gmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=mike.php.net@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.213.53 as permitted sender) X-PHP-List-Original-Sender: mike.php.net@gmail.com X-Host-Fingerprint: 209.85.213.53 mail-yh0-f53.google.com Received: from [209.85.213.53] ([209.85.213.53:59031] helo=mail-yh0-f53.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 67/D5-18053-124C4835 for ; Tue, 27 May 2014 12:58:10 -0400 Received: by mail-yh0-f53.google.com with SMTP id i57so7723301yha.12 for ; Tue, 27 May 2014 09:58:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=5mLqG5t7P4Vjl3/hraGxXgFhoIIctj67orXXAGej8MQ=; b=DxiQSx4CM+XypE7Ccr2cypV608UJbCX5+2zC0k+rbvcKtu6okQQFfVg30Cmet16x3r eXOlz0DscMt4AfJs+EvUAbZht+wG2fu39otzyIwZh1hLLXs6SFjDI3CWsYxUHrRYsDJV czYJbrHQT3NGf2NZ0bDl06jRdFI6UXeyEkN3DOuArR32l0GRdjPgBaPk7ODlTFdwZzpB /bjkqSXiTlf3W+EIluvIsU31zdLps0VlDKjCX9vyXGf4mXoLGBj3CpjCuZIAwZ5OuLEZ WTzd7UZyc/MvE5Q9JeKNgSwE31VtcEllRIP+unD59VkQCI1uLp2QL9KoHhm4WzkZnfJe PoPA== MIME-Version: 1.0 X-Received: by 10.236.134.169 with SMTP id s29mr4252498yhi.4.1401209887014; Tue, 27 May 2014 09:58:07 -0700 (PDT) Sender: mike.php.net@gmail.com Received: by 10.170.191.69 with HTTP; Tue, 27 May 2014 09:58:06 -0700 (PDT) Received: by 10.170.191.69 with HTTP; Tue, 27 May 2014 09:58:06 -0700 (PDT) In-Reply-To: <1401207948.2998.77.camel@guybrush> References: <1401193927.2998.50.camel@guybrush> <1401200710.2998.56.camel@guybrush> <1401205632.2998.67.camel@guybrush> <1401207948.2998.77.camel@guybrush> Date: Tue, 27 May 2014 18:58:06 +0200 X-Google-Sender-Auth: CWYYmuMeHxiP2MwR2_jKgR9MQq4 Message-ID: To: =?UTF-8?Q?Johannes_Schl=C3=BCter?= Cc: PHP Internals Content-Type: multipart/alternative; boundary=20cf303a2eab925a4204fa64993c Subject: Re: [PHP-DEV] Linking and autoloading of dependent extensions From: mike@php.net (Michael Wallner) --20cf303a2eab925a4204fa64993c Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 27 May 2014 18:26, "Johannes Schl=C3=BCter" wro= te: > > On Tue, 2014-05-27 at 18:09 +0200, Michael Wallner wrote: > > > > On 27 May 2014 17:47, "Johannes Schl=C3=BCter" wrote: > > > > > > On Tue, 2014-05-27 at 17:30 +0200, Michael Wallner wrote: > > > > > > > Well, ok... so that's absolutely not the problem I'm trying to solve. > > > > You can still load that stubbornly named extensions manually and > > > > nothing will complain, even if something has a dependency on it. > > > > > > > > > > > > I'm about e.g. pecl install & going ahead without reordering extension > > > > entries... > > > > > > The issue is this can pull in the wrong extension giving the user a hard > > > time to understand how and why that happens. > > > > Could you give an example? I can hardly imagine a likely scenario... > > Whenever there are multiple versions of an extension around. This > happens for different (bad) reasons. So you are not able to provide an example either? If you manage multiple versions of extensions, you're probably also capable of managing your extension section to be loaded in proper manner. > > > And I don't think this will solve the "pecl install & going ahead" wish > > > - what should "pecl install" do? - Add new extensions to the end of the > > > file? So it will be loaded two times? > > > > Wa? pecl will download, build and install the dependencies listed in package.xml. > > It is smart enough to not add the same extension line twice. Frankly, > > I'm not sure what you are talking about. > > It is enough to add it once in the wrong place (too late) to produce a > "already loaded warning" - first the extension will be pulled in by the > new magic, then by the line from php.ini. Which I already mentioned is probably possible to mitigate. > pecl install also won't know which php.ini file(s) to edit - some setups > use different files for cli and web server etc. You obviously do not use the pecl command. It edits whichever file you tell it to maintain. > > > I think the solution is more in the loading and startup logic. I thin= k > > > we should only load explicitly mentioned extensions (or alternatively > > > > Which is the way it currently is, isn't it? > > nope. php_load_extension() opensthe file, fetches the module structure > and starts it up in one go. Which is not possible for extensions that use symbols exportet from dependent extensions, it won't dlopen. > > > *all* extension in extension dir, while that has issues, too, think i.e. > > > > Sounds crazy. Distributions also ship lots of not enabled extensions. > > The could solve it by symlinking "activated" ones in a directory which > is configured as extension dir. Mentioned it mostly for brainstorming > purpose. > > > > Windows where we distribute a bunch of dlls which require some 3rd party > > > libs in proper places), then analyze the dependencies, order the startup > > > call accordingly and start them up. > > > > > > (this all won't solve issues where lazy linking doesn't work and we need > > > system level symbols from other extensions, though ... but I think > > > systems without working RTLD_LAZY are rare these days) > > > > My approach is quite unintrusive, should work in 90% of cases as > > before, and in 10% improved as intended. (Given I solve the > > install_root dilemma) > > ... and gives harder to debug behavior in case a system isn't properly > setup, which likely means there is a less experienced user, which will > have an even harder time. I wouldn't call such a system not properly set up, but rather severely fucked up :) Re-reading the manpage it's now obvious why my first tests failed, which caused me to abandon RTLD_LAZY. So back to the start. Anyway, whatever I propose, I cannot fix your extension naming quirks. Cheers, Mike --20cf303a2eab925a4204fa64993c--