Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:116603 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 19553 invoked from network); 9 Dec 2021 15:34:09 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 9 Dec 2021 15:34:09 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id AC5CD1804AA for ; Thu, 9 Dec 2021 08:34:52 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS15169 209.85.128.0/17 X-Spam-Virus: No X-Envelope-From: Received: from mail-yb1-f173.google.com (mail-yb1-f173.google.com [209.85.219.173]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Thu, 9 Dec 2021 08:34:52 -0800 (PST) Received: by mail-yb1-f173.google.com with SMTP id q74so14902830ybq.11 for ; Thu, 09 Dec 2021 08:34:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=salesforce.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=TOr8AOShVqxxgDK1o6qQ6gSr7EIYeeL7WXAOdsenVng=; b=OusMhT4AWm0rUnukdpiHykL6UHkhwb5wiYJewU98wZOQE6XL1uXAvyMh1hQnJbDzVa JP8vMrbQ6SFDWcydZe6r3+JcMUZ7h/74I6Cq81IFNdo4e1fyBtGDz58SSX2XeuSITeI3 r3k5A6e4oTV+LHhiHfgNQ8iXyAt6FMgWtDtjQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=TOr8AOShVqxxgDK1o6qQ6gSr7EIYeeL7WXAOdsenVng=; b=oL+jb09tmacoqPBye2MTQx+I5ItYkWWeP31Tompt2iaS/EsaCQe/eYwhRNX4ydEE4l KphU0aAKVv1/3K3MXxFwvdDkEax3R+gGATNmoeCHByhukW7B2n76SImg4ps58kae8gOA 8y4UiE02w5BClVX1DHc0IdYlPEKX/Ks7juGm1A60wG4sObDRmbcGCMBlshjbqtGMe1WC Ve/FckXLRwFPS3ifqUxkgkiIgOO+ZXCsAjh6Dtn8r6sZzM87V6En4LGB9jeuJd1dMa4s kNJTt3sN13KFXEy3BzoTtuK7Bsx4QM8IiegGJbcNxAlnoQGBsFvsvfsTmhRIEsETUiY4 6WKw== X-Gm-Message-State: AOAM533J5x8hrVQW78HlUNbrxN33JkDxOy9Rusn8ibX/n3ElBxigRSzL NJQkXUpJRVqEkFRKUUR/wn1brG7Sbjv0dsiPalwdRA== X-Google-Smtp-Source: ABdhPJz3H2YMiDizcxhKulQpqNV8X+/e8/mzWpHgUvxjfwgFbHCgXUajbxWCHEppVSuJvcYTcYuCXbwc03hisPHcaWo= X-Received: by 2002:a25:2d3:: with SMTP id 202mr7190048ybc.111.1639067690805; Thu, 09 Dec 2021 08:34:50 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: Reply-To: David Zuelke Date: Thu, 9 Dec 2021 17:34:39 +0100 Message-ID: To: Glash Gnome Cc: PHP internals Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Subject: Re: [PHP-DEV] Why do PHP 8.1 extensions need PHP headers during make install (worked in <8.1)? From: internals@lists.php.net ("David Zuelke via internals") Of course a 'make && make install' works. That is *not* what's broken since 8.1, and not what I'm talking about. On Thu, Dec 9, 2021 at 4:53 PM Glash Gnome wrote: > > Thanks a lot. > I use PHP 8.2.0-dev (cli) (built: Dec 8 2021 23:53:19) (NTS) > And I can't reproduce the error with my build procedure. > But, if I use "make -d install' insteadof "make && make install' I get er= rors. > > Can you confirm it ? > > > > > > Le jeu. 9 d=C3=A9c. 2021 =C3=A0 03:19, David Zuelke a =C3=A9crit : >> >> Yes, of course; it happens with any extension, because the Makefile >> generated by 8.1's 'phpize' now lists those header dependencies even >> for 'make install'. >> >> Like I described, you can reproduce this by 'make'ing the extension, >> then moving the PHP you used to build the extension, then running >> 'make install' (sample with your ext, on my build environment for >> Heroku's PHP support): >> >> root@8f6813d6dc88:/app# export PATH=3D/app/.heroku/php/bin:$PATH >> root@8f6813d6dc88:/app# which php >> /app/.heroku/php/bin/php >> root@8f6813d6dc88:/app# php -v >> PHP 8.1.0 (cli) (built: Dec 8 2021 20:43:30) (NTS) >> Copyright (c) The PHP Group >> Zend Engine v4.1.0, Copyright (c) Zend Technologies >> with Zend OPcache v8.1.0, Copyright (c), by Zend Technologies >> >> root@8f6813d6dc88:/app# mkdir /tmp/build-ext-cairo >> root@8f6813d6dc88:/app# cd /tmp/build-ext-cairo/ >> root@8f6813d6dc88:/tmp/build-ext-cairo# git clone >> https://github.com/gtkphp/php-ext-cairo-src >> Cloning into 'php-ext-cairo-src'... >> =E2=80=A6 >> >> root@8f6813d6dc88:/tmp/build-ext-cairo# cd php-ext-cairo-src/ >> root@8f6813d6dc88:/tmp/build-ext-cairo/php-ext-cairo-src# git checkout >> origin/PHP-8.0 >> Note: checking out 'origin/PHP-8.0'. >> >> You are in 'detached HEAD' state. You can look around, make experimental >> =E2=80=A6 >> >> HEAD is now at 2cd2ce9 Fix test( compatibility PHP-8) >> >> root@8f6813d6dc88:/tmp/build-ext-cairo/php-ext-cairo-src# phpize >> Configuring for: >> PHP Api Version: 20210902 >> Zend Module Api No: 20210902 >> Zend Extension Api No: 420210902 >> >> root@8f6813d6dc88:/tmp/build-ext-cairo/php-ext-cairo-src# ./configure >> --prefix=3D/app/.heroku/php >> =E2=80=A6 >> >> root@8f6813d6dc88:/tmp/build-ext-cairo/php-ext-cairo-src# make -j9 >> =E2=80=A6 >> Build complete. >> Don't forget to run 'make test'. >> >> root@8f6813d6dc88:/tmp/build-ext-cairo/php-ext-cairo-src# mv >> /app/.heroku/php{,_} >> >> root@8f6813d6dc88:/tmp/build-ext-cairo/php-ext-cairo-src# make install >> make: *** No rule to make target >> '/app/.heroku/php/include/php/main/php.h', needed by 'cairo.lo'. >> Stop. >> >> >> On Thu, Dec 9, 2021 at 2:30 AM Glash Gnome wrote= : >> > >> > Thanks, I'll check it out. >> > >> > I'm confused. Can you tell me if you have this problem with this exten= sion (PHP8 / 7/5>): >> > https://github.com/gtkphp/php-ext-cairo-src checkout PHP-8.0 >> > >> > At the moment I need to check some dependency to try your extension. >> > I'll keep you informed. >> > >> > Best Regards >> > >> > Le jeu. 9 d=C3=A9c. 2021 =C3=A0 01:20, David Zuelke a =C3=A9crit : >> >> >> >> That's... sort of... irrelevant for this question; the problem appear= s >> >> before that step. You could make a tarball of the built extension, >> >> create a .deb archive, whatever; the point is that it should be >> >> installable standalone (think e.g. 'apt-get install php81-imagick'). >> >> >> >> >> >> >> >> On Thu, Dec 9, 2021 at 12:33 AM Glash Gnome w= rote: >> >> > >> >> > Hello, >> >> > >> >> > Can you tell me what the program is in step 7) >> >> > >> >> > > package up >> >> > >> >> > Thanks you, >> >> > >> >> > >> >> > Le mer. 8 d=C3=A9c. 2021 =C3=A0 16:25, David Zuelke via internals <= internals@lists.php.net> a =C3=A9crit : >> >> >> >> >> >> Hi all, >> >> >> >> >> >> When building shared extensions for PHP for the purpose of packagi= ng >> >> >> and distributing the builds, the build environment obviously needs= PHP >> >> >> installed in the destination directory structure (for headers, php= ize, >> >> >> and so forth). >> >> >> >> >> >> But the resulting archive of the built extension should only conta= in >> >> >> the shared object, and possibly the headers. >> >> >> >> >> >> A common pattern to do achieve is: >> >> >> >> >> >> 1) download/extract PHP to $installdir >> >> >> 2) download/extract extension to $builddir >> >> >> 3) phpize in $builddir >> >> >> 4) make in $builddir >> >> >> 5) rm -rf $installdir >> >> >> 6) make install >> >> >> 7) package up $installdir >> >> >> >> >> >> Step 6 installs the extension into $installdir - you end up with >> >> >> /foo/bar/lib/php/extensions/no-debug-non-zts-20210902/something.so >> >> >> >> >> >> That doesn't work with PHP 8.1 anymore - the Makefile generated by >> >> >> phpize now contains an include directive at the top level (near th= e >> >> >> bottom), e.g.: >> >> >> >> >> >> -include src/php_raphf_api.dep >> >> >> >> >> >> Which lists not only the extension's headers, but also all of PHP'= s >> >> >> (in include/main, include/Zend, and so forth): >> >> >> >> >> >> src/php_raphf_api.lo: /tmp/bob-2eBC7e/raphf-2.0.1/src/php_raphf_ap= i.c \ >> >> >> config.h /app/.heroku/php/include/php/main/php.h \ >> >> >> /app/.heroku/php/include/php/main/php_version.h \ >> >> >> /app/.heroku/php/include/php/Zend/zend_stream.h \ >> >> >> /app/.heroku/php/include/php/main/streams/php_stream_context.h \ >> >> >> =E2=80=A6 (many more from main/ and Zend/ here) >> >> >> /app/.heroku/php/include/php/ext/standard/info.h php_raphf.h \ >> >> >> php_raphf_api.h php_raphf.h >> >> >> >> >> >> This results in the 'make install' failing if, like in our step 5 >> >> >> above, PHP itself has been (re-)moved since the 'make' (output tha= t >> >> >> follows is from a 'make -d install'): >> >> >> >> >> >> Considering target file 'src/php_raphf_api.lo'. >> >> >> =E2=80=A6 >> >> >> Considering target file '/app/.heroku/php/include/php/main= /php.h'. >> >> >> File '/app/.heroku/php/include/php/main/php.h' does not e= xist. >> >> >> Looking for an implicit rule for >> >> >> '/app/.heroku/php/include/php/main/php.h'. >> >> >> Trying pattern rule with stem 'php'. >> >> >> Trying implicit prerequisite >> >> >> '/app/.heroku/php/include/php/main//tmp/bob-1830jl/raphf-2.0.1/src= /php.h'. >> >> >> Trying pattern rule with stem 'php.h'. >> >> >> Trying implicit prerequisite >> >> >> '/app/.heroku/php/include/php/main/php.h,v'. >> >> >> Trying pattern rule with stem 'php.h'. >> >> >> Trying implicit prerequisite >> >> >> '/app/.heroku/php/include/php/main/RCS/php.h,v'. >> >> >> Trying pattern rule with stem 'php.h'. >> >> >> Trying implicit prerequisite >> >> >> '/app/.heroku/php/include/php/main/RCS/php.h'. >> >> >> Trying pattern rule with stem 'php.h'. >> >> >> Trying implicit prerequisite >> >> >> '/app/.heroku/php/include/php/main/s.php.h'. >> >> >> Trying pattern rule with stem 'php.h'. >> >> >> Trying implicit prerequisite >> >> >> '/app/.heroku/php/include/php/main/SCCS/s.php.h'. >> >> >> Trying pattern rule with stem 'php'. >> >> >> Trying implicit prerequisite >> >> >> '/app/.heroku/php/include/php/main//tmp/bob-1830jl/raphf-2.0.1/src= /php.h'. >> >> >> Looking for a rule with intermediate file >> >> >> '/app/.heroku/php/include/php/main//tmp/bob-1830jl/raphf-2.0.1/src= /php.h'. >> >> >> Avoiding implicit rule recursion. >> >> >> Trying pattern rule with stem 'php.h'. >> >> >> Trying implicit prerequisite >> >> >> '/app/.heroku/php/include/php/main//tmp/bob-1830jl/raphf-2.0.1/src= /php.h,v'. >> >> >> Trying pattern rule with stem 'php.h'. >> >> >> Trying implicit prerequisite >> >> >> '/app/.heroku/php/include/php/main//tmp/bob-1830jl/raphf-2.0.1/src= /RCS/php.h,v'. >> >> >> Trying pattern rule with stem 'php.h'. >> >> >> Trying implicit prerequisite >> >> >> '/app/.heroku/php/include/php/main//tmp/bob-1830jl/raphf-2.0.1/src= /RCS/php.h'. >> >> >> Trying pattern rule with stem 'php.h'. >> >> >> Trying implicit prerequisite >> >> >> '/app/.heroku/php/include/php/main//tmp/bob-1830jl/raphf-2.0.1/src= /s.php.h'. >> >> >> Trying pattern rule with stem 'php.h'. >> >> >> Trying implicit prerequisite >> >> >> '/app/.heroku/php/include/php/main//tmp/bob-1830jl/raphf-2.0.1/src= /SCCS/s.php.h'. >> >> >> No implicit rule found for '/app/.heroku/php/include/php/= main/php.h'. >> >> >> Finished prerequisites of target file >> >> >> '/app/.heroku/php/include/php/main/php.h'. >> >> >> Must remake target '/app/.heroku/php/include/php/main/php.= h'. >> >> >> make: *** No rule to make target >> >> >> '/app/.heroku/php/include/php/main/php.h', needed by >> >> >> 'src/php_raphf_api.lo'. Stop. >> >> >> >> >> >> Building extensions for 8.0 or lower doesn't generate such a >> >> >> `src/php_EXTNAME_api.dep` file. >> >> >> >> >> >> Is this intentional? If so, could someone explain the purpose of t= he >> >> >> change? I couldn't find anything insightful when browsing the Git >> >> >> logs. >> >> >> >> >> >> The workaround is to >> >> >> >> >> >> make INSTALL_ROOT=3D$SOMETEMPDIR install >> >> >> >> >> >> and then move things into place for packaging, but I was still >> >> >> wondering why this change was made in the first place. >> >> >> >> >> >> Thanks and greetings, >> >> >> >> >> >> David >> >> >> >> >> >> -- >> >> >> PHP Internals - PHP Runtime Development Mailing List >> >> >> To unsubscribe, visit: https://www.php.net/unsub.php >> >> >>