"Nejbohatší život má ten, kdo žije s minimem nároků." --Platón

Konfigurace pro extension

28.3.2010 | koubel | php

Každá php extension je jedním modulem. Jak už jsem psal v předchozích částech, je modul sbírka funkcí, tříd, konstant atd. Modul se do PHP může dostat buď staticky, přímo se slinkuje s ostatními částmi PHP jako jediný celek, nebo dynamicky jako dynamická knihovna. Tu si pak uživatel můžeme přidat do PHP nejčastěji přes konfigurační direktivy v php.ini nebo pomocí funkce dl. Pokud píšeme extenzi do PHP platí pro modul pár zásad, které je třeba dodržet. První z nich je nutnost vytvořit konfiguraci pro kompilování modulu.

Když vytváříte nějakou PHP extension, je asi nejlepší jít cestou dynamické extenze. Dá se snadno testovat z adresáře, ve kterém máte zdrojové soubory extenze. Vývojáři PHP s tím dokonce počítají, pro testování dynamických extenzí je udělána v makefilu přímo podpora.

Doporučuji se nejdříve sestavit kostru modulu a tu si zkusit přeložit. Problém je trochu v tom, že k té kostře je toho potřeba docela dost a když něco chybí, dost špatně se hledá, co vlastně chybí. První věc je tedy konfigurace pro překlad modulu. PHP se drží klasické GNU autotools cesty, takže jde o soubor config.m4, kde kombinací shellu, autoconfu, automake atd. docílíte správné konfigurace pro kompilaci, slinkování a nainstalování vaší extenze. PHP vývojáři přidali do autoconfu některá makra, která vám ulehčí práci. Základní config.m4 pro jednoduchou extenzi bez použití externích knihoven je to, co je vidět v mé extenzi pro include path.

PHP_ARG_WITH(incpath, for OOP IncPath wrapper support,
[  --with-incpath          Include IncPath OOP wrapper support])

Makro PHP_ARG_WITH zajistí přítomnost přepínače ve vygenerovaném configure a pro podporu kompilace Vaší extenze.

if test "$PHP_INCPATH" != "no"; then
    PHP_NEW_EXTENSION(incpath, incpath.c, $ext_shared)
fi

Tady říkáte, že když si uživatel vybral kompilaci vaší extenze, tak jak se extenze bude jmenovat, jaké soubory jsou nutné k její kompilaci a že se bude jednat o sdílenou extenzi. Pokud děláte extenzi čistě jen jako PHP záležitost - není to wrapper nad nějakou C/C++ knihovnou - tak s tímto vystačíte. Pro wrapper máte v podstatě dvě možnosti.

Pokud je knihovna malá, tak je možné zdrojáky knihovny mít jako součást extenze, kompilovat to všechno jako jeden celek. Config.m4 pak zůstane v podstatě stejný, jen naroste definice souborů pro kompilaci. Takhle je to třeba s php extenzí pro dnes tak populární databázi mongodb.

Druhá možnost je kompilovat proti existující knihovně v systému. Tohle je ta správná voda na mlýn autoconfu, který je přesně na tohle určen. Zkontrolovat definované závislosti a provést testy tak, aby se komplilovalo a linkovalo s tím, s čím se má. Když něco chybí, tak zařvat. Tady už je to ale opravdu dost o tom znát shell a autoconf. Dost pomůže poučit se od ostatních, např. v geoIP extenzi je vidět, jak se kontroluje přítomnost hlavičkových souborů, vlastní knihovny, funkcí v knihovně atd.

Celá věc s config.m4 vyjde najevo v okamžiku, když spustíte phpize. To se pak ve Vašem adresáři s extenzí objeví hromada souborů z GNU autotools pro kompilaci (aclocal.m4, configure.in, libtool …), které jsou součástí systému, pokud jste instalovali php ze zdrojových souborů případně máte nějaký ten php-dev balíček. Váš config.m4 do nich krásně zapadne. Např. když spustíte configure --help uvidíte volbu pro kompilaci vaší extenze.

Jen tak na okraj, pár projektů - zejména celé KDE - začalo upouštět od klasického autotools a migrovat na cmake. Je pravda, že ta sbírka shellu a m4 mi tedy nebyla nikdy moc sympatická, tak uvidíme, jestli se toho někdy dočkáme i u php. V rámci GSOC už na to bylo vypsáno téma, zatím se ale nic zásadního neděje a určitě ještě dlouho nic dít nebude.

Příště až čas dovolí, tak už snad něco přímo ke zdrojáku modulu.

  • Currently 45.516/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
aktuální hodnocení 1.52/5 (hlasovalo: 29)
viewpic 3724x
0 trackbacků - url pro trackback
3 komentáře - Přidej komentář
1.   hermes handbags - 16.7.2015 4:57
hermes handbags online
2.   a1053154764 - 23.7.2015 3:51
fangyanting20150723
replica watches rolex
mcm bags
ray-ban sunglasse
longchamp pliage pas cher
cheap oakleys
ray ban outlet
michael kors watches
nike air force pas cher
coach outlet store online
toms shoes for women
gucci handbags
michael kors handbags
michael kors uk
chanel online shop
snapbacks hats
michael kors outlet
coach outlet store online
ray ban outlet
coach outlet store online
gucci uk
beats headphones
kate spade handbags
air jordan uk
kate spade outlet
cheap oakley sunglasses
kate spade new york
soccer jerseys for sale
ralph lauren sale
michael kors bags
fitflops shoes
burberry sale
soccer outlet
coach factory outlet
cheap jordan shoes
tory burch outlet
pandora jewelry outlet
ray ban glasses
true religion outlet
chanel handbags
pandora jewelry sale
prada outlet
oakley sunglasses outlet
coach outlet
true religion sale
nike pas cher
pandora bracelets
true religion jeans
chanel bags
sac louis vuitton
retro jordans
coach outlet store online
coach factory outlet
rolex watches for sale
cheap ray bans
pandora charms
ray bans
gucci borse
longchamp outlet online
cheap jordans uk
michael kors handbags
michael kors bags
longchamp pliage
gucci handbags
kate spade bags
ed hardy uk
michael kors handbags
burberry handbags
ralph lauren uk outlet
michael kors outlet online
jorda femme pas cher
michael kors outlet
cheap oakley sunglasses
michael kors
mcm outlet online
oakley sunglasses outlet
coach outlet online
ed hardy clothing outlet
longchamp pas cher
gucci sito ufficiale
nike blazer high
prada shoes
ray ban sunglasses
hollister kids
tory burch handbags
cheap beats by dre
ray ban sunglasses
polo ralph lauren uk
sac louis vuitton pas cher
oakley outlet
louis vuitton borse
fitflops sale
longchamp
cheap ray ban sunglasses
air force pas cher
tory burch shoes
ray bans
gucci belt
oakley sunglasses
burberry outlet online
cheap soccer jerseys
kate spade bags
coach factory outlet
kate spade handbags
soccer shoes for sale
ralph lauren polo shirts
christian louboutin
polo ralph lauren
coach outlet
jordan femme
tn pas cher
michael kors handbags
mont blanc
ray bans
pandora charms
toms shoes sale
michael kors outlet
ed hardy outlet
true religion sale
louboutin
coach outlet
michael kors
air max 2015
coach outlet
true religion
louboutin femme
coach factory outlet
air max uk
oakley sunglasses cheap
pandora jewelry stores
hollister outlet
abercrombie & fitch
abercrombie and fitch
michael kors purse
cheap oakley sunglasses
ralph lauren femme
tory burch outlet online
longchamp sale
cheap air max
football jerseys
replica watches for sale
toms outlet store
louboutin pas cher
louis vuitton sito ufficiale
kate spade
ralph lauren pas cher
true religion jeans outlet
oakley store
oakley sunglasses wholesale
burberry scarf
mont blanc pens
true religion
michael kors
ray ban wayfarer
cheap jordans free shipping
cheap snabacks
chaussure louboutin pas cher
ed hardy uk clothing
nike air max uk
polo outlet
christian louboutin shoes
louboutin
chanel outlet
burberry outlet
nike blazer pas cher
oakley sunglasses sale
3.   chenyingying - 1.8.2015 5:30
2015-8-1chenyingying9539
michael kors handbags
toms shoes
toms shoes outlet
louis vuitton
ray ban outlet
michael kors outlet
michael kors outlet
tory burch handbags
coach outlet
oakley sunglasses
chanel bags
michael kors bags
louis vuitton handbags
kids lebron james shoes
marc jacobs
jordan 13 retro
ralph lauren uk
fake oakleys
ray ban sunglasses
kevin durant shoes 2015
cheap ray ban sunglasses
tods sale
michael kors
polo shirts
louis vuitton
hollister
tory burch handbags
michael kors
insanity dvd sale
christian louboutin sale
jordan retro 11
michael kors handbag
ray ban
oakley sunglasses
coach outlet online
polo ralph lauren
louis vuitton
air max uk
coach outlet online
jordan shoes
hollister co
michael kors outlet online sale
michael kors outlet online
hollister clothing
cheap oakley sunglasses
coco chanel
coco chanel
hollister
coach outlet online
michael kors outlet
michael kors outlet
cheap air max shoes
michael kors outlet online
gucci outlet
cheap oakley sunglasses
ralph lauren bedding
michael kors handbags
jordan shoes
louis vuitton outlet
jordan 11s
abercrombie
air max 2015
jordans 9
celine handbags
coach outlet store online
chanel bags
insanity workout
louis vuitton outlet
true religion outlet
soccer cleats
abercrombie outlet
michael kors handbags
christian louboutin shoes
jordan 6 cigar
michael kors outlet
ray ban eyeglasses
louis vuitton bags
nba jerseys
louis vuitton
gucci outlet
coach outlet
fake oakley sunglasses
tod's outlet
fendi outlet
ralph lauren outlet
oakley sunglasses
cheap oakley sunglasses
cheap jerseys
abercrombie store new york
longchamp
ray ban eyeglasses
true religion outlet
new jordans
michael kors uk
ray ban sunglasses
kobe bryant shoes for kids
kobe 8
ray ban sunglasses
polo ralph lauren uk
true religion
Přidej komentář