Komentowana treść: GCC-Pack 0.5
[#1] Re: GCC-Pack 0.5
no to numerek mógłby skoczyć wyżej skoro taka duża zmiana się pojawiła :)

Ostatnia aktualizacja: 22.02.2026 23:12:47 przez Mirq
2
[#2] Re: GCC-Pack 0.5

@Mirq, post #1

Okazało się, że nie ma się co rozpędzać i trzeba dodać jedną linijkę patcha do systemowych inkludów. W ich obskurnych zakamarkach, mianowicie w pliku "graphics/gfxnodes.h" i "graphics/monitor.h" są definicje wskaźników do funkcji, które to funkcje przyjmują argumenty w określonych rejestrach procesora. Bardzo brzydki pomysł, od takich rzeczy są hooki, no ale w komentarzach w kodzie autor się tłumaczy, że to takie funkcje "półprywatne". Przez to każdy program w C++, który używa graphics.library wysypie się na kompilowaniu, nawet jeżeli nie korzysta z tych dzikich funkcji. Przeważnie nie korzysta, chyba że ktoś tworzy własne "drivery" monitorów.

Co robić. Postanowiłem w pliku "clib/compiler-specific.h" unieszkodliwić makro __REG__. Napotykamy tam takie oto linie:
#elif defined(__GNUC__) && defined(AMIGA)
#define __REG__(r, p) p __asm(#r)
Plan jest taki, żeby zmienić to następująco:
#elif defined(__GNUC__) && defined(AMIGA) && !defined(__cplusplus)
#define __REG__(r, p) p __asm(#r)
To powoduje, że przy kompilacji w C++ warunek nie jest spełniony i makro __REG__ nie zostaje zdefiniowane. To co prawda nie rozwiązuje problemu tych "półprywatnych" funkcji, w momencie gdy ktoś ich musi użyć, ale kompilacja się nie wywala...

Jeżeli ktoś jest bardzo niecierpliwy, to może to w 0.5 zmienić ręcznie po instalacji. W 0.6 dołożę tę zmianę do patcha nakładanego na inkludy i będzie full automat.

Ostatnia aktualizacja: 23.02.2026 17:19:58 przez Krashan
2
[#3] Re: GCC-Pack 0.5

@Krashan, post #2

To powoduje, że przy kompilacji w C++ warunek nie jest spełniony i makro __REG__ nie zostaje zdefiniowane.

Nie wiem czy może to być tutaj pomocne, ale istnieje dyrektywa preprocesora C o nazwie

#undef

która usuwa definicję danej stałej symbolicznej, bądź makra.
[#4] Re: GCC-Pack 0.5

@Hexmage960, post #3

Nie wiem czy może to być tutaj pomocne
Akurat tu nie. W pliku "clib/compiler-specific.h" po szeregu #if i #elif następuje ostateczne #else, a w nim
#define __REG__(r, p) p
co skutkuje zdefiniowaniem funkcji, o których pisałem, bez określenia w jaki sposób są przekazywane argumenty. To zazwyczaj skończy się źle, ale tylko dla programów wywołujących te funkcje, a mają one bardzo specyficzne zastosowanie. Wszystkie programy po prostu używające graphics.library skompilują się i zadziałają bez przeszkód.
1
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem