← man/dev_and_programming
xsubpp — man xsubpp — 80×24
ugur@toprak:~/man/dev_and_programming$man xsubpp
Bölüm 1 Geliştirme & Programlama

xsubpp

Perl XS kodunu C koduna dönüştürmek için derleyici

Özet

       xsubpp [-v] [-except] [-s pattern] [-prototypes] [-noversioncheck] [-nolinenumbers]
       [-nooptimize] [-typemap typemap] [-output filename]... file.xs

Açıklama

Bu derleyici genellikle ExtUtils::MakeMaker veya Module::Build ya da diğer Perl modül derleme araçları tarafından oluşturulan makefile dosyaları tarafından çalıştırılır.

xsubpp, C fonksiyonlarının Perl değerleri üzerinde işlem yapabilmesini sağlamak için gerekli yapıları içine yerleştirerek XS kodunu C koduna derler ve Perl'in bu fonksiyonlara erişmesini sağlamak için gerekli bağlayıcı köprüyü (glue) oluşturur. Derleyici, C fonksiyon parametrelerini ve değişkenlerini Perl değerleriyle nasıl eşleştireceğini belirlemek için typemap dosyalarını kullanır.

Derleyici, typemap adındaki typemap dosyalarını arayacaktır. Varsayılan typemap'leri bulmak için aşağıdaki arama yolunu kullanacaktır; burada en sağdaki typemap önceliğe sahiptir.

../../../typemap:../../typemap:../typemap:typemap

Ayrıca "ExtUtils::typemap" olarak kurulu olan varsayılan bir typemap'i de kullanacaktır.

Seçenekler

MakeMaker tarafından oluşturulan tüm makefile dosyalarına bu seçenekleri eklemek için "XSOPT" MakeMaker seçeneğinin kullanılabileceğini unutmayın.

-hiertype Tür adlarında '::' ifadesini korur, böylece C++ hiyerarşik türleri eşleştirilebilir.

-except C koduna özel durum yönetimi (exception handling) taslakları (stubs) ekler.

-typemap typemap Kullanıcı tarafından sağlanan bir typemap'in varsayılan typemap'lere göre öncelikli olması gerektiğini belirtir. Bu seçenek birden fazla kez kullanılabilir; bu durumda son belirtilen typemap en yüksek önceliğe sahip olur.

-output filename Üretilecek çıktı dosyasının adını belirtir. Eğer hiçbir dosya belirtilmezse, çıktı standart çıktıya yazılacaktır.

  • -v: xsubpp sürüm numarasını standart çıktıya yazdırır, ardından çıkış yapar.

-prototypes Varsayılan olarak xsubpp, tüm xsub'lar için otomatik olarak prototip kodu üretmez. Bu bayrak prototipleri etkinleştirir.

-noversioncheck Nesne dosyasının (".xs" dosyasından türetilen) ve ".pm" dosyalarının aynı sürüm numarasına sahip olup olmadığını belirleyen çalışma zamanı testini devre dışı bırakır.

-nolinenumbers Çıktıya '#line' yönergelerinin dahil edilmesini önler.

-nooptimize Belirli optimizasyonları devre dışı bırakır. Şu anda etkilenen tek optimizasyon, çıktı C kodu tarafından hedeflerin (targets) kullanılmasıdır (bkz. perlguts). Bu durum, üretilen kodun hızını önemli ölçüde yavaşlatabilir; ancak 5.005 ve daha eski sürümlerdeki xsubpp bu şekilde çalışıyordu.

-noinout “IN”, “OUT_LIST” ve “INOUT_LIST” bildirimlerinin tanınmasını devre dışı bırakır.

-noargtypes Fonksiyon imzalarının ANSI benzeri tanımlarının tanınmasını devre dışı bırakır.

  • -C++ Şu anda hiçbir şey yapmamaktadır.: Bu bayrak, en azından perl5.003_07 sürümüne kadar giden birçok Perl sürümünde hiçbir işlem yapmayan (no-op) bir bayrak olmuştur. Geriye dönük uyumluluk için burada izin verilmektedir.

-s=... veya -strip=... Bu seçenek belirsizdir ve kullanılması önerilmez.

Belirtilirse, üretilen XS fonksiyonlarında C fonksiyon adının başındaki verilen dizgi kaldırılacaktır (eğer bu önekle başlıyorsa). Bu, yalnızca "CODE" veya "PPCODE" blokları içermeyen XSUB'lar için geçerlidir. Örneğin, aşağıdaki XS bildirimi:

void foo_bar(int i);

"xsubpp" aracı "-s foo_" ile çağrıldığında, Perl'de bir "foo_bar" fonksiyonu kuracaktır ancak C'de gerçekte bar(i) fonksiyonunu çağıracaktır. Çoğu zaman bu, istediğinizin tam tersidir ve hata modları oldukça belirsizdir, bu nedenle lütfen mümkün olduğunca bu seçenekten kaçının.

Ortam Değişkenleri

Hiçbir ortam değişkeni kullanılmaz.

Yazar

Aslen Larry Wall tarafından yazılmıştır. Ken Williams tarafından "ExtUtils::ParseXS" modülüne dönüştürülmüştür.

Değişiklik Geçmişi

Changes dosyasına bakın.

Ayrıca Bakınız

perl(1), perlxs(1), perlxstut(1), ExtUtils::ParseXS

perl v5.34.1 2026-02-21 XSUBPP(1)