Damn. Bij de compilatie van PHP worden een tweetal tooltjes (bison en flex) gebruikt. Dat kon ik onder linux niet zien want zo'n make gaat daar veel te snel voor. Onder windows viel het me op omdat ik deze twee programma's niet had (je kan ze downloaden op
http://www.monmouth.com/~wstreett/lex-yacc/lex-yacc.html ).
Nu is het probleem dat bison/flex _juist precies de file genereren waar ik de belangrijkste aanpassingen aan heb gemaakt. Onder linux voerde bison/flex blijkbaar een check uit of de output file al bestaat en of deze nieuwer is dan de file die hij zelf overnieuw gaat genereren, want onder linux wordt 'ie niet overgeschreven (vandaar dat het niet opviel). Onder windows wel, dus die veranderingen ben ik kwijt...
Toen ik het zaakje mee naar huis wilde nemen had ik nog even een "make clean" gedaan, want die onder linux gecompileerde files heb ik onder windows niet nodig. Maar in de makefile staat ook dat hij dan de file van bison/flex moet deleten. Ofwel, ik ben het hele zaakje kwijt
Dat is op zich nog niet zo erg, want het waren maar een aantal wijzigingen en ik weet nog waar ze moeten komen. Het probleem zit 'm juist in dat ik die wijzigingen moet gaan maken in een file die automatisch gegenereerd wordt van een template en in die template bestaat de functie die ik aan wil passen niet (die wordt blijkbaar gegenereerd).
De enige oplossing die ik kan bedenken is het volgende: op elke linux systeem zal die file wel hetzelfde zijn en op elk windows systeem zal die file ook wel hetzelfde zijn (misschien is die gegenereerde file onder windows en linux hetzelfde, want er komen #ifdef WIN32 enzo onder linux in voor). Nu kan ik ook de output van die file pakken en opslaan als een andere file, en nadat de automatische code gegenereerd de automatische file vervangen. Ik ben alleen geen held in linux en windows makefiles...

Met wat geluk zou ik die automatische code generatie eruit kunnen slopen.
Er zitten hier vast wel wat mensen die meer weten over bison/flex, kunnen die een toelichting geven?
Dan heb ik ook nog het probleem dat bij mij php absoluut niet onder windows wil compileren (vooral "Cannot open include file: 'arpa/inet.h'" maakt me het level zuur, het lijkt me juist dat deze include voor linux is bedoelt). Misschien dat ik anders maar eens een oudere versie moet nemen (4.0.5 i.p.v. 4.0.6).
Dus ja, verwacht voorlopig nog even geen resultaat... maar het komt eraan.
hehe, een soort PHP intermediate bytecode
Het probleem zit 'm weer bij dat bison/flex. De source van die code wordt door bison/flex gegenereerd. Die code is nogal lastig (veel macro's/slecht leesbare functienamen), wat wel zal komen omdat het automatisch gegenereerd wordt. Maar in principe zou het mogelijk moeten zijn om het compile en het execute gedeelte van php te scheiden.
Als je er overigens even over nadenkt, kan je de volgende dingen zeggen:
* de programma structuur blijft hetzelfde, dus ook die boom van opdrachten.
* de interne variablen worden in een hash-array gegooit. Een deel ervan bestaat uit programma variablen en een aantal uit environment (CGI/cookie/etc) variablen.
* De hash-array(s) kan je dus voor een deel al hard inbakken, even als de linked list. Het andere gedeelte moet dan run-time geladen worden. Helaas is deze stap nogal lastig.
Verder is het bekijken van php's source-code wel aardig... als je php gebruikt en je kan c/c++ dan moet je er ook eens in kijken en zien hoe php achter de schermen werkt. Wat je dan ziet is dat php eigenlijk alleen maar een schil is om de zend-engine heen (vergelijk php met een library&os en zend met een compiler).