Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:116596 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 70084 invoked from network); 9 Dec 2021 01:18:39 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 9 Dec 2021 01:18:39 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id DA7041804DF for ; Wed, 8 Dec 2021 18:19:13 -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-f178.google.com (mail-yb1-f178.google.com [209.85.219.178]) (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 ; Wed, 8 Dec 2021 18:19:13 -0800 (PST) Received: by mail-yb1-f178.google.com with SMTP id d10so10550090ybn.0 for ; Wed, 08 Dec 2021 18:19:13 -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=yJV2SsuhwRxSC7W1rTx/k1YNNLA6pujo+Mpj2CPUp0o=; b=ONZK9Di0Qj+SoFpUof9TztwJK0WbV+e77teow+N/267r3JrbFYnQhVNxz6/8YzxmHZ /NV8vpmfuYVs/PWvf7KFXW/LTyjtGtk3ka+g4wAhYhwgZ5CJQbQ4t9DZSaRvlLi9F0oy 1/LBaT3uf7UIXk7W+SeoTiaPaMLLEr9HAwXOs= 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=yJV2SsuhwRxSC7W1rTx/k1YNNLA6pujo+Mpj2CPUp0o=; b=gsP0BE8v2x30kzTw0+Cy8EucumpnCZTHZscC2sXycdA/dCse0hGGVeLIpHmDLNY1uo pCjgP8iJ6SN9azsVaYmAHxi/B5QKq0pxHNekOwwPAe8U00XoPdzp+/s96E6XAfSp1RQn wwhNPzewbA33HuKiUs05SJUuIi39tm1DMH2McAtvV4rvgHifTWLgkagwJF2Z+8ENG/lO adn2n+ypysFsOaWj6bcXBDEh/1KLkrvxWR9FFYih2gLjaiwnMhvLQV2eIlV5dFKWYhKy 2mFpdf0HGIHdOP3IUMM0ZxBhPMu5kqEuPUSHGLwhHI4woy5FPiVpTwj7OOOfUl1Ygb/6 EQ5w== X-Gm-Message-State: AOAM533ukE+RltOgZ2XRP65pio0ISAsR0aE/T0EosJqXC+UV1MdOlUgp W+5LWWmciS7L4/PDgSZfjFalSZjGoeYOA2FfxAeslQ== X-Google-Smtp-Source: ABdhPJyNQBp9+t9Lj1d0g7OATyp4cu6mVU/AxCyX3PFgFvTXxBoSSB92WSD5a4l70FxUr9Dnhc6NbeFdZVtNAqmgapw= X-Received: by 2002:a25:388d:: with SMTP id f135mr2858021yba.661.1639016352546; Wed, 08 Dec 2021 18:19:12 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: Reply-To: David Zuelke Date: Thu, 9 Dec 2021 03:19:01 +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") 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 extensio= n (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 appears >> 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 wrot= e: >> > >> > 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 a =C3=A9crit : >> >> >> >> Hi all, >> >> >> >> When building shared extensions for PHP for the purpose of packaging >> >> and distributing the builds, the build environment obviously needs PH= P >> >> installed in the destination directory structure (for headers, phpize= , >> >> and so forth). >> >> >> >> But the resulting archive of the built extension should only contain >> >> 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 the >> >> 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_api.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 that >> >> 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/ph= p.h'. >> >> File '/app/.heroku/php/include/php/main/php.h' does not exis= t. >> >> 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/ph= p.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/ph= p.h'. >> >> Looking for a rule with intermediate file >> >> '/app/.heroku/php/include/php/main//tmp/bob-1830jl/raphf-2.0.1/src/ph= p.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/ph= p.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/RC= S/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/RC= 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/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/SC= CS/s.php.h'. >> >> No implicit rule found for '/app/.heroku/php/include/php/mai= n/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 the >> >> 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 >> >>