InggrisPerancisSpanyol

Ad


favorit OnWorks

metaconfig - Online di Cloud

Jalankan metaconfig di penyedia hosting gratis OnWorks melalui Ubuntu Online, Fedora Online, emulator online Windows, atau emulator online MAC OS

Ini adalah perintah metaconfig yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS

PROGRAM:

NAMA


metaconfig - generator skrip Konfigurasi

RINGKASAN


metakonfigurasi [-dhkmostvwGMV ] [-L dir ]

DESKRIPSI


Metakonfigurasi adalah program yang menghasilkan skrip Konfigurasi. Jika Anda tidak tahu apa
Konfigurasi skrip adalah, silakan lewati ke TUTORIAL bagian dari halaman manual ini. jika kamu mau
deskripsi lengkap (formal) tentang cara menggunakan metakonfigurasi dan satuannya silahkan lihat di
REFERENSI bagian. Berikut ini adalah pengenalan singkat dan referensi untuk berpengetahuan
pengguna.

Metakonfigurasi beroperasi dari himpunan unit yang mendefinisikan segala sesuatu yang metaconfig tahu tentang
portabilitas. Setiap unit mandiri, dan tidak harus didaftarkan di mana pun
selain dengan penyertaan dalam direktori U publik atau direktori U pribadi Anda. Jika
paket dist (di mana metaconfig adalah bagiannya) diinstal di LIB, lalu U . publik
direktori adalah LIB/dist/mcon/U. Pada mesin ini, direktori LIB adalah /usr/share/dist. Milikmu
direktori U pribadi, jika Anda memilikinya, ada di direktori tingkat atas paket Anda.
Sebelum kamu bisa lari metakonfigurasi Anda harus melakukan beberapa hal:

· Buat file .package di direktori tingkat atas paket dengan menjalankan paket.
Program ini akan menanyakan tentang paket Anda dan mengingat apa yang Anda katakan sehingga
semua program dist bisa pintar.

· Lihat Glosarium (dalam LIB/dist/mcon) dan tulis skrip shell dan program C Anda
dalam hal simbol yang metaconfig tahu bagaimana mendefinisikannya. Anda tidak perlu memberi tahu
metaconfig simbol mana yang Anda gunakan, karena metaconfig akan mengetahuinya untuk Anda.

· Hasilkan skrip .SH apa pun yang diperlukan untuk menulis Makefile atau skrip shell yang akan bergantung
pada nilai yang ditentukan oleh Konfigurasi. Ada program yang disebut membuatSH itu akan membantumu
mengonversi skrip biasa menjadi templat script.SH; beberapa pengeditan masih perlu
dilakukan pada file .SH yang dihasilkan untuk memindahkan bagian konfigurasi variabel di
bagian atas skrip (lihat komentar sebaris yang dihasilkan oleh membuatSH dalam .SH . Anda
file).

· Buat file MANIFEST.new di direktori tingkat atas Anda yang mencantumkan semua file di
paket Anda. File ini akan tetap pribadi dan tidak akan menjadi bagian dari final
distribusi. (Untuk kenyamanan, file MANIFEST akan digunakan oleh metakonfigurasi if
belum ada file MANIFEST.new.) Nama file harus menjadi bidang pertama pada masing-masing
garis. Setelah beberapa spasi, Anda dapat menambahkan komentar singkat yang menjelaskan file Anda. Hanya
file sumber harus terdaftar di sana. File khusus tingkat patch.h (yang mana
ditangani dan dipelihara oleh alat penambal -- lihat tepuk(1)) harus menjadi bagian dari
file MANIFEST.new, tetapi mungkin diabaikan secara diam-diam oleh beberapa alat. Sebagai aturan praktis,
hanya file yang dikelola oleh RCS yang harus terdaftar di sana, tingkat patch.h file menjadi
satu pengecualian penting.

· Secara opsional, Anda mungkin ingin membuat file MANIFEST, yang akan menjadi versi yang diekspor
dari MANIFEST.new Anda. File itu harus menjadi bagian dari rilis, yaitu terdaftar di keduanya
MANIFEST.new Anda dan MANIFEST itu sendiri. salah satu dari metakonfigurasi unit tahu tentang ini
file dan akan memaksa Konfigurasi untuk melakukan pemeriksaan rilis, memastikan semua file
tercantum ada bagian dari distribusi. File MANIFEST dan MANIFEST.new seharusnya
menjadi berbeda, bukan tautan.

· Salin file .U yang ingin Anda ubah ke direktori U pribadi Anda. Semua file .U
di direktori U pribadi Anda akan digunakan sebagai preferensi daripada yang ada di U publik
direktori. Misalnya, salah satu cara untuk memaksa penyertaan unit apa pun adalah dengan menyalin End.U
file ke direktori .U Anda dan tambahkan nama unit yang Anda inginkan sebagai ketergantungan
akhir dari ?MAKE: line. Unit tertentu HANYA dapat dipaksa dengan cara ini, yaitu
yang berbentuk Warn_*.U dan Chk_*.U. Anda juga dapat menyesuaikan default tertentu
Konfigurasikan variabel dengan menyalin Myinit.U ke direktori U pribadi paket Anda dan
mengatur variabel dalam unit itu.

Sekarang Anda siap untuk berlari metakonfigurasi. Itu akan membuat Konfigurasi file, dan secara opsional a
config_h.SH file (jika sumber Anda menggunakan simbol C). File yang dihasilkan akan
secara otomatis ditambahkan ke MANIFEST.new Anda jika perlu. Jangan lupa perbarui
file MANIFEST sekalipun.

Untuk membuat unit baru, lakukan hal berikut:

· Salin unit serupa ke file .U baru. Nama yang Anda pilih harus nama a
variabel yang dihasilkan oleh unit, meskipun ini hanya kenyamanan bagi Anda, bukan
persyaratan. Seharusnya 12 karakter atau kurang untuk mencegah pemotongan nama file.
Sebenarnya, mungkin harus 10 atau kurang sehingga mereka yang ingin menggunakan RCS dapat memiliki
a .U,v di akhir tanpa memotong. Metaconfig menggunakan kasus huruf pertama untuk
tentukan apakah ada variabel yang benar-benar dihasilkan oleh unit ini, jadi jangan gunakan huruf besar
nama unit jika seharusnya menghasilkan variabel shell.

· Edit file .U baru untuk melakukan apa yang Anda inginkan. Garis ?MAKE: yang pertama menunjukkan
dependensi; sebelum titik dua daftar terakhir semua variabel yang didefinisikan oleh unit ini, dan
setelah titik dua terakhir semua variabel (atau unit lain) di mana unit ini bergantung.
Sangat penting bahwa daftar ini akurat. Jika ketergantungan adalah opsional dan a
nilai default dapat digunakan, Anda harus mengawali ketergantungan dengan tanda '+'. NS
unit yang sesuai tidak akan dimuat untuk menghitung simbol, kecuali jika benar-benar diperlukan
oleh unit lain.

· Sedapat mungkin, buat parameter unit Anda berdasarkan variabel shell yang ditentukan pada
?INIT: garis. Ini akan memindahkan definisi variabel ke unit Init.U, di mana
mereka dapat diganti dengan definisi di Myinit.U, yang disertakan setelah Init.U.

· Tambahkan definisi dari setiap simbol C yang diinginkan sebagai ?H: garis. Garis yang dimulai dengan
?H:?%<: dalam file .U akan ditambahkan ke file config.h akhirnya jika dan hanya jika
metaconfig memutuskan bahwa unit ini diperlukan. %< adalah singkatan dari nama unit,
yang kebetulan merupakan nama file juga (tanpa .U) jika Anda mengikuti
Konvensi. Selalu beri komentar pada setiap baris ?H: jika salah satu variabel
substitusi sebelumnya pada baris memulai komentar tanpa menyelesaikannya. cangkang apa saja
variabel yang dimulai dengan d_ dapat melakukan ini, jadi berhati-hatilah. Jika Anda menghilangkan ?%<:, maka
metaconfig akan mencoba mengintuisi simbol yang definisinya diperlukan sebelum apa pun
dimasukkan dalam config.h.

· Tambahkan definisi glosarium sebagai ?S: baris untuk variabel shell dan ?C: baris untuk C
variabel praprosesor. Lihat unit saat ini untuk contoh. Hal ini SANGAT penting untuk
awali setiap entri dengan nama simbol rata kiri, dan akhiri setiap entri dengan ?C:. atau
?S:. garis. Algoritme yang menerjemahkan entri simbol praprosesor C untuk
Glosarium ke dalam komentar untuk config.h tergantung pada ini.

· Pastikan urutan semua Anda? garis benar. Urutan yang benar adalah:

?RCS: dan ?X: pada dasarnya hanya komentar
?BUAT: ketergantungan metaconfig
?Y: arahan tata letak unit
?S: definisi cangkang glosarium
?C: glosarium definisi C
?H: definisi config.h
?M: definisi confmagic.h
?W: simbol yang diinginkan
?V: simbol yang terlihat
?F: file yang dibuat oleh unit ini
?T: simbol cangkang sementara yang digunakan
?D: nilai default dependensi opsional
?O: digunakan untuk menandai unit usang
?LINT: petunjuk metalint
?INIT: inisialisasi simbol shell

Berikut adalah contoh untuk menunjukkan urutan baris dan berbagai format yang diizinkan:

?RCS: $RCS-Id$
?RCS: Informasi hak cipta
?RCS: $RCS-Log$
?X:
?X: Contoh yang dibuat-buat
?X:
?BUAT:d_satu dua: tiga + empat Lima
?BUAT: -pilih tambahkan $@ %
?Y: DEFAULT
?S:d_satu:
?S: Simbol shell pertama, secara kondisional mendefinisikan SATU.
?S:.
?S:dua:
?S: Simbol cangkang kedua, nilai DUA.
?S:.
?KERUCUT:
?C: Simbol C pertama.
?C:.
?C:DUA:
?C: Simbol C kedua.
?C:.
?H:#$d_one SATU /**/
?H:#define DUA "$dua"
?H:#$d_one ONE_TWO "$dua"
?H:.
?M:balik: HAS_FLIP
?M:#ifndef HAS_FLIP
?M:#menentukan flip(x) gagal(x)
?M:#endif
?M:.
?W:%<:satu_dua
?V:p_one p_dua:p_tiga
?F:berkas ./ftest !tmp
?T:tmp var
?D:dua='tidak bertahan'
?LIT: ganti tiga
?INIT:dua_init='2'
: kode shell yang mengimplementasikan unit berikut
p_one='satu'
p_dua='dua'
p_tiga=""

Izinkan saya menyatakannya sekali lagi: definisi satuan di atas adalah a gadungan satu untuk hanya menunjukkan
kemungkinan yang berbeda. Unit seperti itu akan melayani sedikit tujuan ... Beberapa lagi
fitur-fitur canggih tidak dijelaskan di sini. Silakan merujuk ke REFERENSI bagian untuk lebih banyak
informasi lengkap.

· Masukkan unit ke dalam direktori U publik atau pribadi yang sesuai.

· Jalankan ulang metakonfigurasi.

· Kirim unit Anda ke [email dilindungi] (Raphael Manfredi) untuk dimasukkan dalam salinan induk,
jika Anda pikir itu untuk kepentingan umum.

Untuk menambahkan program baru untuk ditempatkan:

· Edit Loc.U, dan tambahkan nama program pada baris ?MAKE: (antara
dua titik dua) dan ke loclist atau trylist (tergantung pada apakah programnya
wajib atau tidak).

· Jalankan kembali metaconfig.

· Kirimkan unit Anda kepada saya untuk dimasukkan dalam salinan master, jika menurut Anda itu umum
bunga.

Catatan untuk menulis file .U:

* Selalu gunakan "rm -f" karena ada sistem di mana rm bersifat interaktif secara default.

* Jangan gunakan "set -- ..." karena '--' tidak bekerja dengan setiap shell. Gunakan "set x ...;
menggeser".

* Jangan gunakan "unset ENV" karena unset tidak sepenuhnya portabel. Ucapkan "ENV=''" sebagai gantinya.

* Selalu gunakan echo " " (dengan spasi) karena sistem Eunice.

* Hanya gunakan uji dengan -r, -w, -f atau -d karena itu adalah satu-satunya sakelar portabel. Di dalam
tertentu, hindari "test -x".

* Gunakan hanya program yang disertakan dengan V7, sehingga Anda tahu semua orang memilikinya.

* Gunakan $contains saat Anda ingin grep kondisional, karena tidak semua grep kembali a
status yang wajar. Pastikan untuk mengarahkan output ke /dev/null, dengan menggunakan '>/dev/null
2>&1'.

* Gunakan "jika tes" daripada "jika [...]" karena tidak setiap sh mengetahui konstruksi yang terakhir.

* Gunakan skrip myread untuk input sehingga mereka dapat melakukan pelarian shell dan default
evaluasi. Bentuk umumnya adalah

kasus "$grimble" di
'') dflt=452;;
*) dflt="$grimble";;
esac
rp='Berapa banyak Grimble yang kamu punya?'
. ./bacaan saya
Grimble="$ans"

* Gunakan skrip getfile saat meminta nama path file agar memiliki opsional
~ perluasan nama dan pemeriksaan kewarasan. Lihat unit Getfile.U untuk deskripsi lengkap.

* Selalu beri tanda

$mulai

di bagian atas setiap skrip yang dihasilkan yang akan diluncurkan atau bersumber oleh
Konfigurasi.

* Jangan pernah menganggap UNIX-isme umum seperti fakta bahwa file objek diakhiri dengan a .o dan
bahwa nama perpustakaan diakhiri dengan .a. Menggunakan $_o dan $_a variabel sebagai gantinya (lihat
Unix.U).

* Saat melakukan tes compile-link-execute, selalu tulis seperti ini:

$cc $ccflags $ldflags try.c -o coba $libs

karena beberapa sistem mengharuskan tanda penghubung ditentukan sebelum dikompilasi
target (dengan pengecualian trailing linking library).

* Keluarkan pesan penting pada deskriptor file #4, dengan menggunakan '>&4' untuk mengarahkan output.
Hanya pesan-pesan itu yang akan muncul ketika -s saklar diberikan kepada Konfigurasi pada
baris perintah (mode senyap).

* Selalu mencoba untuk menentukan apakah suatu fitur hadir dengan cara yang paling spesifik--jangan
katakan "jika bsd" ketika Anda bisa grep libc. Ada banyak sistem hybrid di luar sana, dan
setiap fitur harus berdiri atau jatuh dengan sendirinya.

* Selalu mencoba untuk menentukan apakah suatu fitur hadir dengan cara yang paling umum, sehingga
paket lain dapat menggunakan unit Anda.

* Jika ragu, tetapkan default dan tanyakan. Jangan berasumsi apa-apa.

* Jika menurut Anda pengguna salah, biarkan fakta bahwa dia mungkin benar. Untuk
misalnya, dia bisa menjalankan Configure pada sistem yang berbeda dari yang akan dia gunakan
produk akhir pada.

Metaconfig menyimpan nama-nama berikut di direktori Anda, dan jika Anda menggunakan nama seperti itu:
mungkin terganggu atau memiliki efek tak terduga lainnya:

.MT/*
Konfigurasi
Dicari
Usang
mengkonfigurasi
config_h.SH
confmagic.h
kamu/*
MANIFEST.baru

Selain itu, Configure dapat menghancurkan nama-nama ini di direktori tempat ia dijalankan:

UU/*
config.sh
konfigurasi.h

PILIHAN


Opsi berikut dikenali oleh: metakonfigurasi:

-d Aktifkan mode debug. Tidak terlalu berguna kecuali Anda sedang men-debug metakonfigurasi
itu sendiri.

-h Cetak pesan bantuan dan keluar.

-k Simpan direktori sementara, sehingga Anda dapat memeriksa file kerja yang digunakan oleh
metakonfigurasi untuk membangun Anda Konfigurasi naskah. Berguna hanya saat men-debug
unit.

-m Asumsikan banyak memori dan ruang swap. Ini akan mempercepat pencarian simbol di
file sumber dengan jumlah waktu yang signifikan, dengan mengorbankan memori
konsumsi...

-o Memetakan simbol usang pada yang baru. Gunakan sakelar ini jika Anda masih memilikinya
simbol usang dalam kode sumber Anda dan tidak ingin (atau tidak dapat) menghapus
mereka untuk saat ini. Simbol usang sebaliknya diabaikan, meskipun itu
akan memberimu peringatan dari metakonfigurasi.

-s Aktifkan mode senyap.

-t Melacak simbol saat ditemukan.

-v Aktifkan mode verbose.

-w Asumsikan file Wanted up-to-date. Ini akan melewatkan waktu dan memori
memakan fase pemindaian kode sumber, mencari simbol yang dikenal. Gunakan
hanya ketika Anda tahu file sumber Anda tidak berubah sehubungan dengan
kolam renang metakonfigurasi simbol yang digunakan.

-G Juga menyediakan GNU mengkonfigurasi-seperti ujung depan ke yang dihasilkan Konfigurasi
script, untuk dimasukkan dalam distribusi juga. Ini hanya bungkus
sekitar Konfigurasi skrip secara alami, tetapi itu membuat orang terbiasa dengan
Alat GNU agar tidak hilang saat menghadapi distribusi baru.

-L dir Ganti lokasi perpustakaan default. Biasanya hanya berguna untuk metaconfig
pengelola untuk secara lokal menggunakan unit yang sedang dikembangkan alih-alih
yang tersedia untuk umum. NS dir ditentukan adalah yang berisi unit
U direktori.

-M Izinkan produksi a confmagic.h file untuk secara otomatis memetakan kembali beberapa sumur-
simbol yang dikenal ke beberapa alternatif lain, seperti bsalin() sedang dipetakan kembali
secara transparan untuk memcpy() bila tidak tersedia. Opsi ini diaktifkan
secara otomatis ketika confmagic.h file ada di direktori tingkat atas.
Hapus saja file itu jika Anda ingin menonaktifkan opsi ini secara permanen.

-V Cetak nomor versi dan keluar.

TUTORIAL


Bagian (panjang) ini adalah pengantar untuk metakonfigurasi, di mana kita akan mempelajari semua
dasar-dasar. Jika Anda sudah tahu cara menggunakannya metakonfigurasi, Anda dapat dengan aman melompat ke yang berikutnya
bagian.

Ringkasan
Biasanya ketika Anda ingin mendapatkan beberapa paket sumber untuk dikompilasi pada platform tertentu yang Anda miliki
untuk mengedit Makefile utama (dengan asumsi ada satu!), pilih kompiler C, pastikan Anda
memiliki perpustakaan yang tepat, dan kemudian jalankan membuat memerintah. Jika paketnya masuk akal
ditulis dengan baik, itu akan dikompilasi (tanpa peringatan menjadi opsi :-). Dalam dirinya sendiri, yang terakhir
kalimat adalah kinerja nyata, karena mengingat beragam platform UNIX yang tersedia saat ini
dan keragaman rasa, itu berarti penulis paket telah masuk ke dalam
kesulitan untuk menemukan pilihan yang tepat diberikan beberapa uji coba standar, menebak dan mengacaukan
sekitar dengan sistem termasuk dan jenis.

Namun, terlepas dari semua bakatnya, penulis tidak mungkin mengetahui bahwa beberapa sistem memiliki
panggilan sistem yang rusak, atau bahwa beberapa struktur sistem tidak memiliki satu bidang standar, atau
hanya apakah file include yang diberikan ada atau tidak. Dan saya tidak mempertimbangkan yang tersirat
asumsi, seperti tipe yang dikembalikan oleh malloc () fungsi atau keberadaan
ganti nama() panggilan sistem untuk beberapa nama. Tetapi pengetahuan itu diperlukan untuk mencapai yang nyata
portabilitas.

Sekarang mari kita tidak menyalahgunakan diri kita sendiri. Menggunakan informasi itu membutuhkan keterampilan yang lebih besar, namun itu bisa
mengarah ke program yang lebih portabel karena kemudian ditulis dengan cara yang tidak bergantung pada sistem
dan hanya bergantung pada fakta bahwa beberapa asumsi benar atau salah pada sistem tertentu,
setiap asumsi yang tidak berhubungan satu sama lain. Artinya, kami tidak mengatakan: Kami sedang
Sistem BSD atau kita menggunakan sistem USG. Lagipula itu terlalu kabur saat ini. Tidak, kami ingin
katakan pada kode sumber: sistem ini tidak memiliki ganti nama() panggilan sistem dan malloc ()
mengembalikan a (ruang kosong *) nilai.

Metaconfig adalah alat yang memungkinkan Anda melakukan hal itu, dengan manfaat tambahan dari not
harus mengedit Makefile secara manual jika semuanya berjalan dengan baik. Dengan berlari metakonfigurasi, Anda membuat
skrip shell bernama Konfigurasi. Banyak upaya telah dicurahkan untuk skrip Konfigurasi
internal untuk memastikan itu akan berjalan pada 99% dari cangkang yang ada yang tersedia saat ini
menulis. Konfigurasi akan menyelidiki sistem target, mengajukan pertanyaan jika ragu dan
kumpulkan semua jawaban dalam satu file shell, yang pada gilirannya dapat digunakan untuk
secara otomatis menghasilkan Makefile yang dikonfigurasi dan file termasuk C.

Hanya ada kumpulan simbol terbatas (tetapi cukup besar) yang tersedia untuk skrip shell Anda
dan program C. Semuanya didokumentasikan dalam file Glosarium. Yang perlu Anda lakukan hanyalah belajar
tentang mereka dan mulai menggunakannya untuk mengatasi masalah portabilitas dan konfigurasi. Kemudian,
dengan berlari metakonfigurasi, skrip Konfigurasi yang sesuai akan dibuat untuk paket Anda.

Skrip Konfigurasi dibuat beberapa unit (lebih dari 300), setiap unit menjadi
bertanggung jawab untuk mendefinisikan sejumlah kecil simbol shell dan/atau C. Unit dirakit
bersama-sama pada tahap akhir, menghormati grafik ketergantungan (satu unit mungkin memerlukan hasilnya
dari beberapa unit lain yang kemudian ditempatkan sebelumnya dalam naskah).

Simbol
Simbol adalah hal terpenting dalam metakonfigurasi dunia. Mereka yang terkecil
entitas yang dikenali, biasanya berupa kata, dan dapat diberikan nilai di akhir Konfigurasi
eksekusi. Misalnya, simbol pra-prosesor C HAS_RENAME adalah metakonfigurasi simbol itu
dijamin untuk didefinisikan jika, dan hanya jika, ganti nama() panggilan sistem hadir. Juga,
itu $ranlib variabel shell akan disetel ke ':' atau 'ranlib' tergantung pada apakah
panggilan ke ranlib program diperlukan untuk memesan file perpustakaan. Cara kerjanya bukan
penting untuk saat ini, yang penting adalah memahami bahwa simbol-simbol itu diberikan kehidupan
(yaitu nilai) pada Konfigurasi eksekusi.

Menggunakan simbol relatif mudah. Dalam file sumber C, Anda cukup menggunakan simbol
value, sebagai arahan pra-prosesor (misalnya: #ifdef HAS_RENAME) atau, jika simbol
value adalah string, secara langsung seperti Anda menggunakan makro di C. Dan dalam file shell atau a
Makefile, Anda dapat mereferensikan simbol shell secara langsung.

Sebenarnya, saya berbohong, karena itu tidak sepenuhnya ajaib seperti paragraf sebelumnya
bisa terdengar. Dalam file C, Anda harus menyertakan Configure-produced konfigurasi.h file, dan
Anda harus membungkus skrip shell atau Makefile Anda dalam file .SH dan Anda dapat mereferensikan shell
simbol hanya di bagian substitusi variabel dari file .SH itu. Lebih lanjut tentang ini nanti.

sumber File
Simbol mungkin hanya muncul dalam kumpulan file sumber yang terbatas, karena metakonfigurasi hanya akan
pindai itu ketika mencari simbol yang dikenal, mencoba mencari tahu unit mana yang dibutuhkannya.
Anda dapat menggunakan simbol C dalam file sumber C, yaitu file dengan a .c, .h, .y or .l ekstensi, dan
simbol shell hanya dicari di file .SH.

Untuk mendapatkan nilai simbol, file C perlu menyertakan yang khusus konfigurasi.h
file, yang diproduksi oleh Konfigurasi ketika simbol C hadir. Dan file .SH dijalankan
melalui shell, menghasilkan file baru. Namun, di bagian atas file .SH,
khusus config.sh file (juga diproduksi dengan menjalankan Konfigurasi) bersumber, dan variabel
substitusi berlaku. Sebenarnya, konfigurasi.h dihasilkan dengan menjalankan metakonfigurasi-diproduksi
config_h.SH file, sekali lagi menggunakan substitusi variabel. Jadi kita akan melihat itu
sedikit lebih dekat karena ini adalah jantung dari keseluruhan konfigurasi skema...

Variabel Substitusi
Ada konstruksi shell yang disebut di sini dokumen yang memungkinkan perintah untuk mengambil input
ditentukan dalam skrip itu sendiri. Input itu ditafsirkan oleh shell sebagai double-
string yang dikutip atau string yang dikutip tunggal tergantung pada bentuk dokumen di sini
spesifikasi.

Untuk menentukan dokumen di sini, token '<<' digunakan, diikuti oleh satu pengenal. Dari
kemudian, baris skrip yang tersisa membentuk input untuk perintah, hingga di sini
dokumen ditemukan pada baris dengan sendirinya. Substitusi shell (termasuk variabel shell
substitusi) dilakukan kecuali pengidentifikasi dikelilingi oleh tanda kutip tunggal. Contohnya:

var='pertama'
tar = 'kedua'
echo "--> pertama di sini dokumen:"
kucing <
var='$var'
tar='$tar'
EOM
echo "--> kedua di sini dokumen:"
kucing <<'EOM'
gema $var
gema $tar
EOM
echo "--> selesai."

akan menghasilkan, ketika dijalankan melalui Shell:

-> pertama di sini dokumen:
var='pertama'
tar = 'kedua'
-> kedua di sini dokumen:
gema $var
gema $tar
--> selesai.

Dokumen pertama di sini memiliki konten yang ditafsirkan sementara yang kedua adalah keluaran apa adanya.
Keduanya berguna dalam skrip .SH, seperti yang akan kita lihat.

Menggunakan .NS Script
Skrip .SH biasanya dibuat dengan menjalankan BuatSH skrip file lain yang ada,
mengubah fillet menjadi file.SH. Mari kita ambil satu contoh. Ini sedikit skrip
(sebut saja ukuran besar) yang mencetak satu pesan, ukuran int tipe data di C
Sayangnya, ia memiliki nilai yang tertanam di dalamnya, dengan demikian:

#!/ Bin / sh
intsize = '4'
echo "Pada mesin ini, tipe int adalah $intsize byte"

Ayo lari membuatSH di atasnya dengan mengetik 'membuatSH ukuran besar'. Kami mendapatkan satu intsize.SH mengajukan itu
terlihat seperti ini:

kasus $CONFIG di
'')
jika tes -f config.sh; lalu TOP=.;
elif tes -f ../config.sh; lalu TOP=..;
elif tes -f ../../config.sh; lalu TOP=../ ..;
elif tes -f ../../../config.sh; lalu TOP=../../..;
elif tes -f ../../../../config.sh; lalu TOP=../../../..;
lain
echo "Tidak dapat menemukan config.sh."; keluar 1
fi
. $TOP/config.sh
;;
esac
: Ini memaksa file SH untuk membuat target di direktori yang sama dengan file SH.
: Hal ini agar membuat depend selalu tahu dimana mencari turunan SH.
kasus "$ 0" dalam
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
esac
echo "Mengekstrak intsize (dengan substitusi variabel)"
: Bagian file ini akan memiliki penggantian variabel yang dilakukan di atasnya.
: Pindahkan apapun yang membutuhkan config subs dari !NO!SUBS! bagian ke !GROK!THIS!.
: Lindungi tanda dolar dan backtick yang tidak ingin Anda tafsirkan
: dengan meletakkan garis miring terbalik di depan. Anda dapat menghapus komentar ini.
$spitshell >intsize <
$mulai
!GROK! INI!

: Dalam dolar berikut dan backticks tidak perlu garis miring terbalik ekstra.
$spitshell >>intsize <<'!TIDAK!SUBS!'
intsize = '4'
echo "Pada mesin ini, tipe int adalah $intsize byte"
!TIDAK!SUBS!
chmod 755 ukuran int
$eunicefix intsize

Bagian pertama dari skrip ini (dalam kasus pernyataan) sedang mencoba untuk menemukan config.sh
file, untuk sumbernya. NS $KONFIG variabel salah secara default, benar ketika
config.sh telah bersumber (yang akan terjadi jika file ini dieksekusi dari
dalam Konfigurasi sendiri, tapi jangan bingung masalah di sini).

Setelah config.sh file telah menjadi sumber, semua simbol shell ditentukan oleh Konfigurasi adalah
mengatur. Kita tahu mencapai pernyataan kasus kedua, digunakan untuk mengubah direktori saat ini harus a
path digunakan untuk mencapai program ini (misalnya jika kita mengatakan 'sh ../scripts/intsize.SH', kami
akan lari dulu'cd ../skrip' sebelum melanjutkan). Jika Anda tidak memahami ini, jangan
khawatirkan itu.

Inilah hal-hal yang menarik. Skrip ini menggunakan $ludah variabel, dan itu bukan
sesuatu yang kita tahu tentang ... belum. Jika Anda melihat melalui file Glosarium, Anda akan melihat bahwa
ini adalah variabel yang dikenal dengan metakonfigurasi. Jika Anda menjadikan file ini bagian dari distribusi Anda
(dengan memasukkannya ke dalam file MANIFEST.new, kami akan kembali lagi nanti) dan jalankan
metakonfigurasi, lalu Konfigurasi skrip akan menentukan nilai yang sesuai untuk variabel ini
dan itu akan diatur dalam config.sh. Hal yang sama berlaku untuk $mulai dan yang misterius $eunicefix at
tamat. Pada sistem yang masuk akal, bagian yang relevan dari config.sh akan terlihat seperti ini:

spitshell = 'kucing'
startsh='#!/ Bin / sh'
eunicefix=':'

Ah! Kami menuju ke sana. Sekarang terlihat akrab. Kami menghadapi single kucing perintah siapa
input berasal dari dokumen yang diinterpolasi variabel di sini dan outputnya diarahkan ke
ukuran besar. Nilainya akan sebesar $mulai, yaitu '#!/ Bin / sh'. Baik sejauh ini.

Kemudian kita mencapai perluasan dokumen kedua di sini, untuk mendapatkan sisa skrip. Ini
waktu, simbol dokumen di sini dikelilingi oleh tanda kutip tunggal sehingga isinya akan menjadi
ditambahkan kata demi kata ke ukuran besar mengajukan. Jadi, dengan menjalankan 'sh intsize.SH', kita mendapatkan
keluaran berikut:

Mengekstrak intsize (dengan substitusi variabel)

dan dengan melihat file intsize yang dihasilkan, kita melihat:

#!/ Bin / sh
intsize = '4'
echo "Pada mesin ini, tipe int adalah $intsize byte"

yang persis apa yang kita miliki di awal. Sejauh ini, ini adalah prosedur tanpa operasi...
Tapi, betapa luar biasa! Itu terjadi (kebetulan murni, percayalah!), itu metakonfigurasi tahu
tentang $intsize simbol cangkang. Dengan memindahkan inisialisasi intsize ke variabel-
area interpolasi skrip .SH dan menginisialisasinya dengan Konfigurasi-nilai yang dihitung,
dan menghapus komentar yang sekarang tidak berguna yang ditambahkan oleh membuatSH, kita mendapatkan:

kasus $CONFIG di
'')
jika tes -f config.sh; lalu TOP=.;
elif tes -f ../config.sh; lalu TOP=..;
elif tes -f ../../config.sh; lalu TOP=../ ..;
elif tes -f ../../../config.sh; lalu TOP=../../..;
elif tes -f ../../../../config.sh; lalu TOP=../../../..;
lain
echo "Tidak dapat menemukan config.sh."; keluar 1
fi
. $TOP/config.sh
;;
esac
kasus "$ 0" dalam
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
esac
echo "Mengekstrak intsize (dengan substitusi variabel)"
$spitshell >intsize <
$mulai
intsize='$intsize'
!GROK! INI!

$spitshell >>intsize <<'!TIDAK!SUBS!'
echo "Pada mesin ini, tipe int adalah $intsize byte"
!TIDAK!SUBS!
chmod 755 ukuran int
$eunicefix intsize

Tentu saja, menjalankan skrip ini melalui shell akan kembali menampilkan skrip yang sama. Tapi jika
kita lari Konfigurasi pada mesin di mana int disimpan sebagai kuantitas 64 bit, config.sh akan
set ukuran besar untuk 8 dan ukuran besar skrip akan menghasilkan nilai yang tepat dan mencetak:

Pada mesin ini, tipe int adalah 8 byte

yang mana yang benar. Selamat! Kami baru saja mengonfigurasi skrip shell!!

Memproduksi konfigurasi.h
Sekarang kita bisa melihat jalannya konfigurasi.h dihasilkan dari config_h.SH. Kami tahu itu
berjalan Konfigurasi menghasilkan a config.sh skrip (bagaimana tepatnya ini dilakukan tidak sepenuhnya
relevan di sini, tetapi bagi yang penasaran, ini adalah substitusi dokumen lain di sini
Konfigurasi diri). NS config_h.SH itu sendiri dibangun oleh metakonfigurasi pada saat yang sama
Konfigurasi adalah, asalkan Anda menggunakan setidaknya satu simbol C di dalam sources.

Mari kita lihat secara acak config_h.SH file untuk melihat apa yang sebenarnya terjadi:

kasus $CONFIG di
'')
jika tes -f config.sh; lalu TOP=.;
elif tes -f ../config.sh; lalu TOP=..;
elif tes -f ../../config.sh; lalu TOP=../ ..;
elif tes -f ../../../config.sh; lalu TOP=../../..;
elif tes -f ../../../../config.sh; lalu TOP=../../../..;
lain
echo "Tidak dapat menemukan config.sh."; keluar 1
fi
. $TOP/config.sh
;;
esac
kasus "$ 0" dalam
*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
esac
echo "Mengekstrak config.h (dengan penggantian variabel)"
sed < config.h -e 's!^#undef!/define!' -e 's!^#un-def!#undef!'
/*
* File ini dibuat dengan menjalankan skrip config_h.SH, yang
* mendapatkan nilainya dari config.sh, yang umumnya diproduksi oleh
* menjalankan Konfigurasi.
*
* Jangan ragu untuk memodifikasi semua ini sesuai kebutuhan. Catatan, bagaimanapun,
* bahwa menjalankan config.h.SH lagi akan menghapus semua perubahan yang Anda buat.
* Untuk perubahan yang lebih permanen, edit config.sh dan jalankan kembali config.h.SH.
*/

/* Waktu konfigurasi: $cf_time
* Dikonfigurasi oleh: $cf_by
* Sistem target: $myuname
*/

#ifndef _config_h_
#tentukan _config_h_

/* bkopi:
* Simbol ini dipetakan ke memcpy jika rutin bcopy() tidak
* tersedia untuk menyalin string.
*/
/* TELAH_BCOPY:
* Simbol ini didefinisikan jika rutin bcopy() tersedia untuk
* menyalin blok memori. Anda tidak boleh menggunakan simbol ini di bawah
* keadaan normal dan gunakan bcopy() secara langsung sebagai gantinya, yang
* akan dipetakan ke memcpy() jika bcopy tidak tersedia.
*/
#$d_bcopy HAS_BCOPY /**/
#ifndef HAS_BCOPY
#ifdef bcopy
# un-def bcopy
#berakhir jika
#define bcopy(s,d,l) memcpy((d),(s),(l)) /* dipetakan ke memcpy */
#berakhir jika

/* HAS_DUP2:
* Simbol ini, jika didefinisikan, menunjukkan bahwa rutinitas dup2 adalah
* tersedia untuk menduplikasi deskriptor file.
*/
#$d_dup2 HAS_DUP2 /**/

/* Saya_STRING:
* Simbol ini, jika didefinisikan, menunjukkan kepada program C bahwa itu harus
* termasuk (Sistem USG) bukannya (sistem BSD).
*/
#$i_string I_STRING /**/

#berakhir jika
!GROK! INI!

Di bagian atas file, kami mengenali konstruksi .SH standar yang sudah kami miliki
dipelajari secara rinci. Selanjutnya adalah ekstraksi file itu sendiri, melalui dokumen di sini dengan
substitusi variabel. Namun, di sini kami tidak menggunakan yang polos kucing tapi a sed sebagai gantinya, karena
kita perlu melakukan beberapa pengeditan lebih lanjut saat itu juga. Kita akan melihat alasannya nanti, jadi mari kita lupakan
tentang hal itu sekarang.

Kami sekarang mencapai komentar utama, dan file ditandai dengan waktu konfigurasi, the
sistem target, dll... (variabel-variabel yang berasal dari sumber config.sh file telah
diatur oleh Konfigurasi). Tajuk komentar itu diikuti oleh perlindungan '#ifndef' untuk dijaga
terhadap beberapa penyertaan file ini. Kemudian datanglah inti dari file ...

Ini membantu untuk mengetahui hal itu $d_* dan $i_* variabel disetel ke 'menetapkan' atau 'tidak pasti' oleh
Konfigurasi, tergantung pada apakah suatu fungsi atau file yang disertakan ada di sistem atau
bukan. Itu berarti:

#$d_bcopy HAS_BCOPY /**/

baris akan diperluas menjadi:

#definisikan HAS_BCOPY /**/

jika variabel $d_bcopy diatur ke 'define' atau:

#undef HAS_BCOPY /**/

jika $d_bcopy disetel ke 'undef', karena fitur tersebut tidak ada. Namun, itu tidak
apa yang tertulis di konfigurasi.h mengajukan karena sed filter yang telah kita lihat,
yang akan mengubah bentuk kedua menjadi:

/*#menentukan HAS_BCOPY /**/

Itu formulir yang berguna untuk pengeditan nanti konfigurasi.h karena Anda hanya perlu menghapus
memimpin '/*' jika Anda ingin menimpa Konfigurasipilihan. Demikian juga, Anda dapat menambahkan satu
'/*' di awal baris '#define' untuk menghindari definisi simbol tertentu.
Inilah sebabnya mengapa setiap definisi simbol dilindungi oleh tanda '/**/', untuk menutup awalan
komentar dibuka oleh '/*' (komentar tidak bersarang di C).

Sekarang mengubah '#undef' menjadi '/*#define' itu bagus, tetapi jika kita ingin benar-benar menulis
'#undef', kita terjebak... kecuali jika kita menulisnya sebagai '#un-def' dan biarkan sed perbaiki itu ke '#undef'
saat memproduksi konfigurasi.h, yang sebenarnya dilakukan di sini.

Jenis penalaran yang sama berlaku untuk dua baris itu:

#$d_dup2 HAS_DUP2 /**/
#$i_string I_STRING /**/

dan asumsi config.sh mendefinisikan:

d_dup2='menentukan'
i_string = 'def'

kita akan masuk ke produksi konfigurasi.h:

#definisikan HAS_DUP2 /**/
/*#menentukan I_STRING /**/

Bening seperti air mengalir? Bagus!

Sekarang harus jelas bahwa dengan memasukkan konfigurasi.h di semua file sumber C, Anda dapat
tahu apa Konfigurasi telah menebak pada sistem Anda. Akibatnya, dengan menggunakan simbol-simbol itu, Anda
menulis kode C yang dikonfigurasi, karena metakonfigurasi akan tahu bahwa Anda membutuhkan simbol dan kemauan itu
menghasilkan yang cocok config_h.SH file serta semua kode yang diperlukan di Konfigurasi untuk
menghitung nilai yang tepat untuk mereka (dengan menetapkan nilai ke variabel shell terkait).

Running Metakonfigurasi
Mari kita fokus pada metakonfigurasi program untuk sementara waktu untuk memahami bagaimana ia menggunakan unitnya dan
kode sumber Anda untuk menghasilkan semua file konfigurasi yang diperlukan. Jika Anda berniat untuk menulis baru
unit, Anda harus memiliki pemahaman yang baik tentang keseluruhan skema.

Jika tidak ada file MANIFEST.new, metakonfigurasi akan mencoba menggunakan file MANIFEST sebagai gantinya,
untuk kenyamanan. Di mana pun kami menyebut MANIFEST.new, itu dapat dipahami sebagai MANIFEST
asalkan tidak ada file MANIFEST.new yang ditemukan di root paket Anda.

Dengan asumsi file MANIFEST.new Anda diatur dengan benar dan mencantumkan semua file sumber yang Anda inginkan
konfigurasikan, dan yang telah Anda jalankan paket di direktori sumber root Anda untuk membuat
paket file, Anda dapat menjalankan metakonfigurasi dan Anda akan mendapatkan yang berikut:

$metaconfig
Menemukan unit...
Mengekstrak daftar ketergantungan dari 312 unit...
Mengekstrak nama file (*.[chyl] dan *.SH) dari MANIFEST.new...
Membuat file yang Diinginkan...
Memindai file .[chyl] untuk simbol...
Memindai file .SH untuk mencari simbol...
Menghitung grafik ketergantungan optimal...
Membangun file make pribadi...
Menentukan unit yang dapat dimuat...
Memperbarui membuat file...
Menentukan urutan yang benar untuk unit...
Membuat Konfigurasi...
Done.

Tahap pertama mencari semua file unit (berakhir dengan .U) di direktori publik
pertama, lalu di kamar pribadi Anda. Jika Anda menyalin file publik di direktori U pribadi Anda
(yaitu direktori bernama U di tingkat atas paket Anda), itu akan menimpa publik
Versi: kapan. Setelah memiliki daftar semua unit yang tersedia, ia menguraikannya dan mengekstrak semuanya
?MAKE: baris untuk mengetahui tentang dependensi dan simbol shell yang dikenal. Juga
berfokus pada ?H: garis untuk mempelajari tentang simbol C dan simbol shell mana yang harus ada
dihitung untuk mendapatkan nilai yang tepat untuk simbol C itu (jadi kami memiliki tingkat ketergantungan yang lain
sini).

Selanjutnya, nama file yang tepat diekstraksi dari file MANIFEST.new dan a Dicari file adalah
built: file itu mencantumkan semua simbol C dan simbol shell yang diperlukan untuk paket itu. Kita
pertama-tama pindai file tipe-C untuk simbol C, lalu sebarkan dependensi ke
simbol shell terkait (dikumpulkan dari ?H: baris). File .SH berikutnya dipindai dan akhirnya
semua simbol shell diketahui.

Makefile sementara dibuat dan metaconfig mencoba untuk membuat semua simbol cangkang untuk dilihat
perintah apa (tercantum di baris ?MAKE: kedua) yang dieksekusi, dan dengan demikian unit mana yang
sangat dibutuhkan. Unit opsional yang tidak diperlukan akan dihapus dan Makefile kedua adalah
dihasilkan. Kali ini, kita tahu tentang semua unit dan pesanannya masing-masing, opsional
unit telah dihapus dan nilai default dihitung untuk simbol shell mereka. NS
Konfigurasi skrip kemudian dapat dibuat, bersama dengan config_h.SH. Dilakukan.

Konvensi
Konvensi yang tepat perlu diikuti untuk membuat seluruh proses terdengar. Ada kasus
konvensi untuk unit dan konvensi penamaan variabel.

Semua unit harus memiliki huruf pertama huruf kecil, kecuali unit khusus. Oleh
khusus, maksud kami mereka tidak benar-benar mendefinisikan variabel shell baru yang dapat digunakan oleh
pengguna dalam file .SH-nya, melainkan unit yang menghasilkan skrip atau variabel shell yang
digunakan secara internal oleh Konfigurasi naskah. Contoh tipikal adalah Init.U file yang mana
inisialisasi variabel utama, atau Bacaan saya.U yang menghasilkan bacaku skrip yang digunakan hampir
di mana-mana Konfigurasi ketika sebuah pertanyaan akan diajukan kepada pengguna.

Unit non-khusus kemudian dibagi lagi menjadi dua kelompok berbeda: unit yang mendefinisikan variabel
terkait dengan simbol C dan unit yang mendefinisikan variabel shell mereka sendiri. Grup pertama
selanjutnya dibagi dalam variabel yang terkait dengan menyertakan file (nama mereka dimulai dengan i_) Dan
variabel yang terkait dengan definisi lain (nama dimulai dengan d_). Kelompok kedua memiliki
nama berdiri untuk dirinya sendiri, misalnya cc.U mendefinisikan $cc variabel shell yang nilainya adalah
compiler C yang akan digunakan.

Unit khusus terkadang mencadangkan sendiri beberapa variabel yang telah ditentukan sebelumnya dan mengembalikan "hasil"
dalam variabel terkenal lainnya. Misalnya, bacaku skrip yang diproduksi oleh Myread.U
mengharapkan prompt dalam $rp, jawaban default di $dflt dan menempatkan jawaban pengguna di $ans.
Ini tidak didokumentasikan di halaman manual ini: Anda harus pergi dan melihat unit itu sendiri untuk
memahami variabel mana yang digunakan dan bagaimana unit akan digunakan.

Menggunakan Grafik Glosarium
File Glosarium secara otomatis diproduksi oleh makegloss skrip, yang mengekstrak
informasi dari ?S:, ?C: dan ?BUAT: garis dan format ulang menjadi abjad
glosarium yang diurutkan. Penting untuk membaca Glosarium untuk mengetahui tentang simbol Anda
diperbolehkan untuk digunakan. Namun, Glosarium tidak akan memberi tahu Anda cara menggunakannya. Biasanya, itu
terserah kamu.

Suatu hari, Anda mungkin akan menulis unit Anda sendiri dan Anda akan cukup tahu tentang metakonfigurasi
untuk melakukannya dengan cepat dan efisien. Namun, jangan pernah lupa untuk mendokumentasikan pekerjaan Anda dengan benar di
garis ?S: dan ?C:, atau orang lain tidak akan dapat menggunakannya kembali. Ingat tentang
waktu di mana Anda hanya memiliki Glosarium dan halaman manual ini untuk memulai.

Kesimpulan
Sekarang kamu tahu itu metakonfigurasi dasar-dasar, Anda harus membaca DESKRIPSI bagian, lalu
lompat ke REFERENSI bagian untuk mempelajari tentang semua detail berdarah seperti yang diizinkan
sintaks untuk baris kontrol unit (baris yang dimulai dengan '?') atau perintah MAKE yang berbeda
Anda diperbolehkan untuk menggunakan.

REFERENSI


Bagian ini mendokumentasikan internal dari metakonfigurasi, pada dasarnya sintaks unit, spesial
unit yang harus Anda ketahui dan file petunjuknya.

Umum Satuan Sintaksis
Unit metaconfig dibagi menjadi dua bagian yang berbeda. Bagian header (baris dimulai
dengan '?') dan bagian shell (kode untuk dimasukkan dalam Konfigurasi naskah). Dia
mungkin untuk menambahkan '?X:' komentar di mana saja di dalam unit, tetapi yang lain '?' garis (juga
bernama kontrol baris) memiliki kebijakan pemesanan yang ketat.

Jika garis kontrol terlalu panjang, dimungkinkan untuk menggunakan lanjutan dengan keluar dari final
baris baru dengan garis miring terbalik dan melanjutkan ke baris berikutnya (yang kemudian harus diindentasi
dengan spasi atau tab).

Berikut ini adalah deskripsi formal dari masing-masing garis kontrol. Kecuali dinyatakan
jika tidak, urutan presentasi ini adalah urutan yang akan digunakan dalam unit.

?RCS: gratis teks
Untuk digunakan untuk komentar RCS, di bagian atas unit.

?X: Apa pun teks
Komentar tujuan umum. Dapat muncul di mana saja di unit tetapi harus dibiarkan rata.
Untuk komentar RCS, gunakan ?RCS: formulir komentar.

?MEMBUAT:simbol daftar: ketergantungan daftar [+opsional]
Ini adalah garis ketergantungan pertama. Pertama simbol daftar harus mencantumkan semua simbol
dibangun oleh unit ini (yaitu yang nilainya dihitung oleh bagian cangkang unit).
Simbol harus dipisahkan oleh spasi. Jika simbol yang ditentukan hanya untuk penggunaan internal dan
seharusnya tidak muncul di yang dihasilkan config.sh file, maka harus didahului oleh a
'+' (jangan bingung dengan dependensi opsional yang ditentukan selanjutnya). Kedua
bagian dari daftar (setelah tengah ':') adalah ketergantungan unit. Itu harus mencantumkan semua
unit khusus yang dibutuhkan, serta semua simbol yang digunakan oleh shell
penerapan. Jika simbol diperlukan tetapi nilai konfigurasinya tidak kritis, itu
dapat didahului oleh '+', dalam hal ini disebut ketergantungan bersyarat: its
unit yang sesuai akan dimuat jika, dan hanya jika, simbol itu benar-benar
diinginkan; jika tidak, nilai default akan digunakan.

?MEMBUAT:tab Command
Mungkin ada satu atau lebih baris perintah yang mengikuti baris ketergantungan awal. Itu
perintah akan dieksekusi ketika unit ingin memuatnya ke dalam Konfigurasi. Lihat
paragraf tentang membuat perintah untuk informasi lebih lanjut. Perhatikan bahwa terkemuka tab
karakter diperlukan sebelum Command.

?Y:tata ruang
Deklarasikan arahan tata letak untuk unit ini. Arahan itu mungkin salah satu string
puncak, kegagalan or dasar (huruf besar tidak masalah, gaya yang disarankan adalah mengejanya
huruf besar). Jika dihilangkan, kegagalan diasumsikan.

Arahan ini hanya diperlukan jika Anda ingin memaksa unit di atas atau bawah
dari yang dihasilkan Konfigurasi skrip, karena dependensi unit mengizinkannya. Penting
pertanyaan demikian mungkin dipaksakan di awal. Dalam kelas tata letak yang sama, unit
diurutkan berdasarkan abjad dengan dua kasus khusus untuk unit d_* dan i_*, dipaksa
masing-masing di bagian atas dan bawah kelas mereka (tetapi ini harus milik
kelas bawaan).

Jika Anda memaksa di atas unit yang ketergantungannya membutuhkan semua unit lain untuk
mendahuluinya, Anda tidak mencapai apa pun yang menarik. Oleh karena itu, arahan itu harus benar-benar
digunakan untuk meningkatkan prioritas beberapa unit interaktif yang tidak bergantung pada banyak
simbol lain yang terlihat oleh pengguna, seperti pertanyaan terkait jalur.

?S:simbol_nama [(usang simbol daftar)]:
Memperkenalkan simbol cangkang. Baris pertama ini menamai simbol, secara opsional diikuti oleh a
daftar terlampir di antara tanda kurung dan memberikan padanan yang usang. Itu sudah usang
simbol akan dipetakan ulang ke yang baru simbol_nama jika -o pilihan diberikan kepada
metakonfigurasi.

?S:Apa pun teks, untuk Glosarium
Pada dasarnya komentar yang menjelaskan simbol shell, yang akan diekstraksi oleh makegloss
ke dalam file Glosarium.

?S:. Menutup komentar simbol shell.

?C:simbol_nama [~ alias] [(usang simbol daftar)]:
Memperkenalkan simbol C baru. NS alias nama adalah nama di mana simbol C akan
dikendalikan, yaitu jika alias simbol yang diinginkan, maka simbol C itu akan ditulis
dalam config_h.SH mengajukan. Biasanya, aliasnya hanya '%<' (singkatan dari nama unit)
dan ada juga ?W: pemetaan garis simbol C ke alias. Juga bagian yang relevan
dari ?H: baris secara eksplisit dilindungi oleh kondisi '?%<'. Lihat simbolnya
paragraf aliasing untuk lebih jelasnya. Garis yang tersisa adalah opsional
usang simbol daftar, yang mencantumkan padanan lama untuk yang baru simbol_nama.

?C:Apa pun teks, untuk Glosarium dan config_h.SH
Pada dasarnya komentar yang menggambarkan simbol C, yang akan diekstraksi oleh makegloss
ke dalam file Glosarium dan dengan metakonfigurasi ke dalam config_h.SH file jika simbolnya adalah
diinginkan (atau jika aliasnya diinginkan ketika simbol aliasing digunakan).

?C:. Menutup komentar simbol C.

?H:?simbol:config_h.SH barang
Ini adalah permintaan penyertaan umum ke dalam config_h.SH. Baris hanya ditulis ketika
penjaga simbol benar-benar diinginkan. Bentuk umum ini diperlukan ketika simbol C
alias digunakan. Jika tidak, jika Anda menggunakan salah satu bentuk "standar" lainnya,
menjaga secara otomatis dilakukan oleh metakonfigurasi itu sendiri.

?H:#$d_var VAR "$var"
Mendefinisikan secara kondisional VAR simbol C menjadi $var kapan disetel ke 'menetapkan'. menyiratkan
'?VAR:' menjaga kondisi, dan metakonfigurasi otomatis menautkan VAR ke dua cangkangnya
dependensi variabel (yaitu keduanya $d_var dan $var akan ditandai sebagai ingin if VAR is
digunakan dalam sumber C).

?H:#menentukan VAR [opsional teks]
Selalu mendefinisikan VAR C simbol untuk beberapa nilai. menyiratkan '?VAR:' menjaga kondisi.
Ketergantungan shell otomatis dibuat untuk unit itu sendiri.

?H:#menentukan VAR(x,y,z) $var
Selalu mendefinisikan makro VAR menjadi nilai $var variabel. Terserah
unit untuk memastikan $var memiliki nilai yang masuk akal. Ketergantungan otomatis antara C
makro VAR dan variabel shell ditetapkan, dan seluruh baris dijaga oleh
implisit '?VAR:'.

?H:#$d_var VAR
Didefinisikan secara kondisional VAR if $d_var diatur ke 'menetapkan'. menyiratkan '?VAR:' menjaga
kondisi. Ketergantungan shell otomatis dihasilkan terhadap $d_perang.

?H:#menentukan VAR "$var"
Menetapkan nilai yang dikonfigurasi ke VAR simbol C. menyiratkan '?VAR:' kondisi aman.
Ketergantungan shell otomatis dibuat untuk menautkan VAR dan $var.

?H:. Menutup config_h.SH permintaan inklusi.

?M:C simbol: C ketergantungan
Memperkenalkan definisi ajaib tentang simbol C, untuk confmagic.h, dan mendefinisikan
menjaga simbol untuk sisa ?M: definisi. Baris ini diam-diam menyiratkan
'?W:%<:C simbol', yaitu unit akan dimuat ke Konfigurasi jika simbol C muncul
dalam sumber C, apakah sihir digunakan atau tidak. Ketergantungan C diaktifkan
ketika sihir digunakan, untuk memaksakan definisi mereka di config_h.SH. Namun, jika
sihir adalah tidak digunakan tetapi simbol C muncul di sumber tanpa C . yang diperlukan
dependensi, Anda akan diperingatkan setiap kali file Wanted dibuat, karena mungkin saja
masalah portabilitas (dan juga karena unit dimuat tanpa syarat ke
Konfigurasikan kapan pun simbol C digunakan, terlepas dari garis ?C: lainnya dari
satuan).

?M:cpp def
Mendefinisikan pemetaan cpp ajaib yang akan diperkenalkan di confmagic.h kapan pun yang bersangkutan
simbol digunakan. Ada ' implisit '?sim' jaga dimana sim adalah nama simbol
didefinisikan oleh garis ?M: terdepan.

?M:. Menutup confmagic.h permintaan penyertaan.

?A:tempurung simbol daftar:C simbol daftar
Ikat nasib simbol kulit dengan simbol C: jika salah satu dari C
simbol yang terdaftar diinginkan, maka semua simbol shell ditandai sebagai diinginkan. Berguna untuk
memaksa penyertaan unit (daftar simbol kulit diatur ke '%<') ketika kehadiran beberapa C
simbol terdeteksi. Daftar simbol cangkang dapat dibiarkan kosong, untuk mengambil manfaat dari samping
efek lokasi simbol C dalam pra-prosesor bawaan (simbol menjadi didefinisikan
untuk pra-prosesor itu jika terletak di sumbernya). Untuk mencari pola dengan spasi
di dalamnya, Anda perlu mengutip simbol C dalam tanda kutip sederhana, seperti pada 'struct
zona waktu'.

?V:read-only simbol:Baca tulis simbol
Ini adalah sebuah metalin petunjuk dan harus digunakan hanya di unit khusus yang mengekspor beberapa shell
variabel. Variabel sebelum tengah ':' diekspor hanya-baca (mengubahnya
akan mengeluarkan peringatan), sementara simbol lainnya dapat dengan bebas dibaca dan diubah.

?F:arsip dibuat
Baris ini melayani dua tujuan: itu adalah a metalin petunjuk, dan juga pengganti untuk
masa depan jadilah menggunakan. Itu harus mencantumkan tiga jenis file: yang sementara adalah
dibuat untuk pengujian, UU pribadi dibuat di direktori UU untuk nanti
teliti, dan yang publik tertinggal di direktori root paket. Sementara
file harus didaftar dengan tanda '!' karakter (artinya "tidak! mereka tidak digunakan kembali
nanti!"), file UU pribadi harus didahului dengan './' (artinya: untuk menggunakannya, katakan
./mengajukan, Bukan hanya fillet), dan yang publik harus dinamai apa adanya.

?T:tempurung sementara
Lain metalin petunjuk. Baris ini mencantumkan semua variabel shell yang digunakan sebagai sementara
dalam bagian cangkang unit ini.

?D:simbol='nilai'
Nilai inisialisasi untuk simbol yang digunakan sebagai dependensi bersyarat. Jika tidak ada ?D: garis adalah
ditemukan, maka nilai null digunakan sebagai gantinya. NS metalin program akan memperingatkan Anda jika a
simbol digunakan setidaknya sekali sebagai ketergantungan bersyarat dan tidak memiliki yang tepat
?D: inisialisasi. Ini adalah praktik yang baik untuk menambahkan baris-baris itu bahkan untuk nol
inisialisasi karena menekankan pada kemungkinan sifat opsional dari suatu simbol.

?HAI:Apa pun pesan kamu ingin
Arahan ini menunjukkan bahwa unit ini secara keseluruhan sudah usang. Kapanpun penggunaan apapun
simbolnya dibuat (atau penggunaan tidak langsung melalui dependensi), pesannya dikeluarkan pada
layar (di stderr). Anda dapat menempatkan satu baris lebih banyak, dalam hal ini setiap baris akan
dicetak, berurutan.

?BAHAN:metalin petunjuk
Lihat metalin halaman manual untuk penjelasan tentang petunjuk berbeda yang dapat
bekas.

?INIT:inisialisasi kode
Kode inisialisasi yang ditentukan oleh baris ini akan dimuat di bagian atas
Konfigurasi script yang disediakan unit diperlukan.

C Символ Mengasingkan
Terkadang tidak mungkin untuk mengandalkan metakonfigurasipilihan default sendiri untuk config_h.SH
komentar dan definisi simbol C. Di situlah aliasing berperan. Karena itu agak
sulit untuk dijelaskan, kita akan mempelajari contoh untuk memahami mekanisme yang mendasarinya.

Unit d_const.U mencoba menentukan apakah kompiler C Anda mengetahui tentang const
kata kunci. Jika tidak, kami ingin memetakan ulang kata kunci itu ke string nol, untuk membiarkan
kompilasi program. Selain itu, kami ingin memicu tes secara otomatis ketika const kata
digunakan.

Berikut adalah bagian yang relevan dari unit d_const.U:

?BUAT:d_const: cat cc ccflags Setvar
?BUAT: -pilih tambahkan $@ %
?S:d_const:
?S: Variabel ini secara kondisional mendefinisikan simbol HASCONST, yang
?S: menunjukkan kepada program C bahwa kompiler C ini tahu tentang
?S: tipe konstan.
?S:.
?C:HASCONST ~ %<:
?C: Simbol ini, jika didefinisikan, menunjukkan bahwa kompiler C ini tahu tentang
?C: tipe const. Tidak perlu benar-benar menguji simbol itu
?C: dalam program Anda. Penggunaan kata kunci "const" saja akan
?C: memicu tes yang diperlukan.
?C:.
?H:?%<:#$d_const HASCONST /**/
?H:?%<:#ifndef HASCONST
?H:?%<:#define const
?H:?%<:#endif
?H:.
?W:%<:const
?LINT: atur d_const
?LIT:konstituen yang diketahui
: periksa kata kunci const
gema " "
echo 'Memeriksa apakah kompiler C Anda mengetahui tentang "const"...' >&4
/bin/kucing >const.c <<'EOCP'
utama()
{
const char *foo;
}
EOCP
if $cc -c $ccflags const.c >/dev/null 2>&1 ; kemudian
val="$tentukan"
echo "Ya, memang."
lain
val="$undef"
echo "Tidak, tidak."
fi
setel d_const
evaluasi $setvar

Pertama kita perhatikan penggunaan garis ?W:, yang pada dasarnya mengatakan: "Satuan ini diinginkan ketika
const kata kunci digunakan dalam file C.". Untuk memetakan ulang secara kondisional const ke nol
merangkai konfigurasi.h, saya memilih untuk mendefinisikan secara kondisional HASCONST melalui $d_const.

Namun, ini menimbulkan masalah, karena HASCONST simbol tidak akan digunakan dalam
sumber, hanya const tanda adalah. Dan ?H: pendefinisian garis HASCONST secara implisit
dijaga oleh '?HASCONST'. Oleh karena itu, kita harus menambahkan batasan eksplisit '?%<' untuk memberi tahu
metakonfigurasi bahwa garis-garis itu harus dimasukkan dalam config_h.SH kapan pun simbol '%<'
diinginkan (%< mengacu pada nama unit, di sini d_const).

Itu hampir sempurna, karena ?W: baris akan ingin d_const kapan saja const digunakan, maka
?H: garis akan disertakan dalam config_h.SH mengajukan. Namun, komentar utama (?C:
garis) melekat pada HASCONST itu sendiri juga dijaga melalui HASCONST, yaitu memiliki implisit
'?HASCONST' kendala. Oleh karena itu diperlukan alias itu HASCONST simbol ke '%<'.

Bagian yang tersisa dari unit (bagian cangkang) sangat mudah. Sederhana saja
mencoba mengkompilasi contoh program C menggunakan const kata kunci. Jika bisa, maka itu akan
menetapkan $d_const melalui $setvar fonction (didefinisikan oleh Setvar.U satuan). Lihat paragraf
tentang unit khusus untuk lebih jelasnya.

Membuat Perintah
Pada baris perintah ?MAKE:, Anda dapat menulis perintah shell untuk dieksekusi apa adanya atau a
khusus -memilih perintah yang terjebak oleh metakonfigurasi dan diuraikan untuk melihat apa yang seharusnya
selesai. Awalan '-' hanya ada untuk mencegah membuat dari gagal ketika perintah kembali
status bukan nol -- itu tidak terlalu diperlukan karena kami menggunakan 'membuat -n' untuk menyelesaikan
dependensi, tetapi saya menyarankan Anda untuk menyimpannya jika itu menjadi wajib di versi mendatang.
Sintaks dari memilih perintahnya adalah:

-memilih cmd $@ file_target

dimana $@ adalah makro standar dalam Makefiles yang mewakili target saat ini (nama
unit yang sedang dibangun, dengan ekstensi .U terakhir dilucuti). NS cmd bagian adalah
sebenarnya metakonfigurasi perintah yang akan dijalankan, dan file_target adalah parameter lain, yang
interpretasi tergantung pada cmd diri. Ini juga memiliki ekstensi .U terakhirnya dan
biasanya merujuk ke file unit, kecuali jika dimulai dengan './' dalam hal ini merujuk satu
dari metakonfigurasi mengontrol file di '.MT direktori.

Perintah yang tersedia adalah:

tambahkan Tambahkan file_target untuk Konfigurasi.

tambahkan.Config_sh
Mengisi bagian itu dari Konfigurasi memproduksi config.sh mengajukan. Hanya digunakan
variabel ditambahkan, yang bersyarat (dari dependensi bersyarat) adalah
dilewati.

add.Null Menambahkan bagian yang menginisialisasi semua variabel shell yang digunakan ke string kosong.

c_h_weed Menghasilkan config_h.SH mengajukan. Hanya garis yang diperlukan yang dicetak.

cm_h_weed Menghasilkan confmagic.h mengajukan. Hanya garis yang diperlukan yang dicetak. Ini
perintah hanya diaktifkan ketika -M sakelar diberikan, atau ketika a confmagic.h fillet
sudah ada.

tutup.Config_sh
Menambahkan simbol 'EOT' terakhir pada baris dengan sendirinya untuk mengakhiri dokumen di sini
membangun memproduksi config.sh file.

prepend Menambahkan konten target ke file_target jika file itu tidak kosong.

gulma Menambahkan unit ke Konfigurasi seperti menambahkan perintah, tetapi buat beberapa tes tambahan
untuk menghapus '?simbol' dan '%simbol' baris dari file_target jika simbol
tidak diinginkan atau diinginkan secara kondisional. Formulir '%' hanya digunakan secara internal oleh
metakonfigurasi sambil memproduksi file .U sendiri di '.MT' direktori.

menghapus Sama seperti menambahkan benar-benar, tetapi melakukan substitusi makro tambahan. NS
makro yang tersedia dijelaskan dalam Hardwired Macro paragraf.

Sebagai catatan, metakonfigurasi menghasilkan a -kondisi perintah secara internal untuk menangani kondisional
dependensi. Anda tidak boleh menggunakannya sendiri, tetapi Anda akan melihatnya jika memindai
dihasilkan Makefile dalam .MT direktori.

Hardwired Macro
Makro berikut dikenali oleh menghapus perintah dan diganti sebelum dimasukkan ke dalam
Konfigurasi:

Nomor revisi dasar paket, berasal dari paket.

Tanggal saat ini.


Alamat email pengelola paket ini, berasal dari
paket.


Nama paket, seperti yang berasal dari Anda paket file.


Tingkat tambalan dari metakonfigurasi program (tidak digunakan lagi karena ).


Tingkat revisi SVN dari metakonfigurasi program.

Nomor versi dari metakonfigurasi program.

Makro tersebut terutama digunakan untuk mengidentifikasi metakonfigurasi versi yang menghasilkan
tertentu Konfigurasi skrip dan untuk paket mana itu dilakukan. Alamat email dari
pengelola tertanam dalam instruksi utama yang Konfigurasi mencetak saat memulai.

Baru metakonfigurasi versi memahami sintaks formulir yang jauh lebih umum:

<$variabel>

yang diganti pada Configure-generation time dengan nilai variabel diambil dari Anda
paket mengajukan. Akhirnya, format makro bawaan lama akan hilang, dan <$baserev>
akan menggantikan di semua unit yang disediakan.

Khusus unit
Unit khusus berikut digunakan untuk memfaktorkan kode dan memberikan level yang lebih tinggi
fungsi. Mereka menghasilkan skrip shell yang dapat bersumber atau shell
variabel yang bisa evaluasi'ed. Passing parameter dilakukan melalui variabel yang sudah dikenal baik
bernama atau anonim seperti $1, $2, dll... (yang dapat dengan mudah diatur melalui shell set
operator). Kapan Konfigurasi mengeksekusi, itu membuat dan masuk ke a UU direktori, jadi setiap
skrip yang dihasilkan terletak di sana dan tidak mengganggu file dari paket Anda.

Berikut adalah sepcial unit yang harus Anda ketahui, dan cara menggunakannya.

Cppsym.U
Unit ini menghasilkan skrip shell yang disebut Cppsym, yang dapat digunakan untuk menentukan
apakah simbol apa pun dalam daftar ditentukan oleh preprosesor C atau kompiler C yang Anda miliki
ditentukan. Itu dapat menentukan status simbol apa pun, meskipun simbol di
(daftar atribut) lebih mudah ditentukan.

Csym.U
Ini menetapkan variabel shell $csym, digunakan secara internal oleh Konfigurasi untuk memeriksa apakah
diberikan simbol C didefinisikan atau tidak. Penggunaan yang khas adalah:

atur hasil simbol [-fva] [sebelumnya]
evaluasi $csym

Itu akan mengatur mengakibatkan variabel menjadi 'benar' jika fungsi [-f], variabel [-v] atau
array [-a] didefinisikan, 'salah' sebaliknya. Jika nilai sebelumnya diberikan dan -r
saklar disediakan untuk Konfigurasi (Lihat Konfigurasi Opsi paragraf), maka
nilai digunakan kembali tanpa pertanyaan.

Cara perhitungan ini dilakukan tergantung pada jawaban yang diberikan pengguna atas pertanyaan tersebut
Konfigurasi akan bertanya tentang apakah itu harus melakukan nm ekstraksi atau tidak. jika
ekstraksi dilakukan, unit hanya melihat melalui daftar simbol, jika tidak
ia melakukan tes tautan kompilasi, kecuali -r diberikan untuk menggunakan kembali yang dihitung sebelumnya
nilai, tentu saja ...

Akhir.U
Dengan menyalin unit ini ke pribadi Anda U direktori dan menambahkan dependensi pada
?BUAT: baris, Anda dapat memaksa unit tertentu untuk dimuat ke dalam Konfigurasi bahkan jika tidak
jika tidak diinginkan. Beberapa unit mungkin hanya dipaksa masuk Konfigurasi seperti itu

Fileexp.U
Unit ini menghasilkan skrip shell fileexp yang akan memperluas nama file yang dimulai dengan
tilde. Penggunaan yang khas adalah:

exp_name=`./fileexp $nama`

untuk menetapkan nama file yang diperluas di nama_exp.

Temukanhdr.U
Satuan ini menghasilkan temukan skrip yang digunakan untuk mencari file header di
$usrinc atau tempat asing lainnya menggunakan kemampuan cpp. Script diberikan
sertakan nama dasar file seperti 'stdio.h' atau 'sys/file.h' dan itu mengembalikan path lengkap
file yang disertakan dan status nol jika ditemukan, atau string kosong dan status bukan nol
jika file tidak dapat ditemukan.

Dapatkanfile.U
Unit ini menghasilkan sedikit kode shell yang harus bersumber untuk mendapatkan file
nama dan membuat beberapa pemeriksaan kewarasan. Secara opsional, ekspansi ~name dilakukan.

Untuk menggunakan satuan ini, $rp dan $dflt harus menahan pertanyaan dan jawaban default, yang
akan diteruskan apa adanya ke bacaku naskah (lihat yang akan datang Bacaan saya.U). Itu $fn
variabel mengontrol operasi dan hasilnya dikembalikan ke $ans.

Untuk mencari file atau direktori, masukkan 'f' atau 'd' di f~/. Jika '~' muncul, maka ~nama
substitusi diperbolehkan. Jika '/' muncul, hanya nama path absolut yang diterima dan
~penggantian nama selalu diperluas sebelum kembali. Jika '+' ditentukan,
pemeriksaan keberadaan dilewati. Jika 'n' muncul di dalam $fn, maka pengguna diperbolehkan untuk
menjawab 'tidak ada'.

Biasanya, kecuali jika Anda meminta portabilitas, substitusi ~nama terjadi saat diminta.
Namun, ada kalanya Anda ingin melewati portabilitas dan memaksa
pengganti. Anda dapat menggunakan huruf 'e' (memperluas) untuk melakukannya.

Jika tipe khusus 'l' (lokasi) digunakan, maka $fn variabel harus diakhiri dengan ':',
diikuti dengan nama file. Jika jawabannya adalah direktori, nama filenya adalah
ditambahkan sebelum menguji keberadaan file. Ini berguna dalam pertanyaan gaya-lokasi
seperti ini:

dflt='~berita/lib'
: tidak perlu menentukan 'd' atau 'f' saat 'l' digunakan
fn='l~:aktif'
rp='Di mana file yang aktif?'
. ./getfile
aktif="$ans"

Selain itu, huruf 'p' (jalur) dapat digunakan bersama dengan 'l' untuk memberi tahu
dapatkan file bahwa jawaban tanpa '/' di dalamnya harus diterima, dengan asumsi bahwa itu akan
berada di PATH setiap orang pada saat nilai ini akan dibutuhkan.

Juga berguna adalah kemungkinan untuk menentukan daftar jawaban yang harus diterima
verbatim, melewati semua pemeriksaan. Daftar ini harus dalam tanda kurung dan item
harus dipisahkan koma, tanpa spasi. Jangan lupa untuk mengutip
string yang dihasilkan karena tanda kurung berarti bagi shell. Contohnya:

dflt='/bin/instal'
fn='/fe~(instal,./instal)'
rp='Gunakan program penginstalan yang mana?'
. ./getfile
instal="$ans"

akan membiarkan pengguna hanya menentukan jalur yang sepenuhnya memenuhi syarat yang merujuk ke file yang ada,
tetapi tetap izinkan jawaban "instal" dan "./instal" khusus apa adanya (dengan asumsi
tentu saja sesuatu akan berurusan dengan mereka secara khusus nanti dalam rantai sejak mereka melakukannya
tidak sesuai dengan kerangka umum yang diharapkan).

Jika jawaban dari pertanyaan 'tidak ada', maka pemeriksaan keberadaan dilewati dan
string kosong dikembalikan. Perhatikan bahwa sejak dapatkan file panggilan bacaku secara internal, semua
fitur yang tersedia dengan bacaku berlaku di sini untuk.

Jika nilai yang diperluas sepenuhnya diperlukan (misalnya dalam Makefile), Anda dapat menggunakan
itu $ansexp variabel yang selalu diatur dengan benar oleh dapatkan file sebagai diperluas
versi $ans. Tentu saja, itu tidak akan memperluas ~name jika Anda tidak mengizinkannya di
tempat pertama di $fn variabel.

Inhdr.U
Satuan ini menghasilkan $inhdr variabel shell, digunakan secara internal oleh Konfigurasi untuk memeriksa
apakah satu set header ada atau tidak. Penggunaan yang khas adalah:

setel header i_header [ header2 i_header2 ... ]
nilai $inhdr

Itu akan mencetak pesan, mengatakan apakah header ditemukan atau tidak dan mengatur
i_header variabel sesuai. Jika lebih dari satu header ditentukan dan yang pertama
header tidak ditemukan, kami mencoba yang berikutnya, hingga daftar kosong atau ditemukan.

Inlibc.U
Satuan ini menghasilkan $inlibc variabel shell, digunakan secara internal oleh Konfigurasi untuk memeriksa
apakah fungsi C yang diberikan didefinisikan atau tidak. Penggunaan yang khas adalah:

atur fungsi d_func
evaluasi $inlibc

Itu akan mencetak pesan, mengatakan apakah fungsi itu ditemukan atau tidak dan disetel
$d_fungsi demikian. Secara internal, itu menggunakan $csym rutin.

Lokasi.U
Unit penting ini menghasilkan skrip shell loc yang dapat digunakan untuk mencari tahu dimana
dalam daftar direktori file yang diberikan terletak. Argumen pertama menentukan file untuk
terletak, argumen kedua adalah apa yang akan dikembalikan jika pencarian gagal, dan
argumen reamining adalah daftar direktori tempat file akan dicari. Untuk
contoh:

dflt=`./loc sendmail.cf X / Usr / lib /var/lib/sendmail / lib`

akan mengatur $dflt untuk X jika tidak sendmail.cf file ditemukan di bawah direktori yang terdaftar,
atau semacamnya /usr/lib/sendmail.cf pada beberapa sistem. Lihat juga Dapatkanfile.U.

MailAuthor.U
Unit ini perlu disertakan pada baris ?MAKE: dari End.U pribadi Anda untuk membuat
itu menjadi Konfigurasi. Ini menawarkan pengguna untuk mendaftarkan dirinya ke penulis, secara opsional
diberitahukan ketika tambalan baru tiba atau menerimanya secara otomatis saat dikeluarkan.
Anda perlu menginstal agen surat untuk melakukan ini (setidaknya versi 3.0).

Daftar Surat.U
Unit ini perlu disertakan pada baris ?MAKE: dari End.U pribadi Anda untuk membuat
itu menjadi Konfigurasi. Ini menawarkan pengguna untuk berlangganan atau berhenti berlangganan milis
tempat diskusi terkait paket berlangsung. Anda harus lari paket
dan jawab pertanyaan terkait milis untuk mengatur variabel yang tepat di Anda
paket sebelum unit ini dapat beroperasi.

Myinit.U
Salin unit ini ke pribadi Anda U direktori untuk menambahkan nilai default Anda sendiri ke beberapa
variabel internal. Unit ini dimuat ke dalam Konfigurasi setelah semua default
inisialisasi telah dilakukan.

Bacaan saya.U
Satuan ini menghasilkan bacaku skrip shell yang harus bersumber untuk melakukan a
Baca. Ini memungkinkan shell lolos, penetapan default dan evaluasi parameter, sebagai
didokumentasikan dalam unit Instruct.U. Ini juga memungkinkan pengaturan dinamis dari -d pilihan,
yang akan digunakan untuk sisa eksekusi skrip.

Untuk menggunakan satuan ini, $rp harus menahan pertanyaan dan $dflt harus berisi default
menjawab. Pertanyaan akan dicetak oleh skrip itu sendiri, dan hasilnya dikembalikan
dalam $ans variabel.

Berikut adalah penggunaan yang khas:

dflt='y'
rp='Pertanyaan?'
. ./bacaan saya
nilai="$ans"

Lihat unit itu sendiri untuk informasi lebih lanjut.

Konfigurasi lama.U
Unit ini harus menjadi bagian dari ketergantungan Anda ?BUAT: baris ketika beberapa unit Anda mencoba
untuk menggunakan kembali nilai simbol lama. Unit ini bertanggung jawab untuk mendapatkan jawaban lama
dari config.sh atau memberikan petunjuk yang berguna saat berjalan pada platform tertentu untuk
pertama kali. Lihat Konfigurasi Petunjuk paragraf untuk informasi lebih lanjut tentang petunjuk.

Awalan.U
Tujuan dari unit ini adalah untuk mendeteksi perubahan dalam direktori awalan instalasi untuk
menghitung ulang default yang sesuai secara otomatis dari jawaban sebelumnya. Itu bergantung pada
nilai dari $awalan lama variabel yang memegang direktori awalan sebelumnya ketika itu
berubah, dan kosong sebaliknya. Misalnya, jika awalan diubah dari /memilih untuk
/ usr / local, maka direktori instalasi biner sebelumnya akan diubah dari
/memilih/bin untuk / usr / local / bin, atau akan tetap tidak berubah jika, katakanlah, /tempat sampah.

Anda perlu menelepon set sebelum mengeluarkan evaluasi on $awalan, Seperti:

setel dflt var [dir]
eval $awalan

yang akan mengatur $dflt untuk $var or $awalan/dir tergantung pada apakah awalan tetap
sama atau tidak. Jika dir adalah string tak satupun, nilai spasi tunggal dalam $dflt disimpan sebagai-
adalah, bahkan ketika awalan berubah. Jika dir dihilangkan, maka $dflt disetel ke kosong
string jika awalannya diubah, menjadi $var jika tidak.

Awalan.U
Maksud dari unit ini mirip dengan Prefixit.U, yaitu membantu memperbaiki
string default untuk mengakomodasi perubahan awalan. Namun, variabel shell $awalan,
ketika dievaluasi, hanya akan memulihkan ~ekspansi nama, harus menggunakan awalan seperti pelarian
mekanisme. Gunakan sebagai:

setel dflt
eval $awalan

sebelum diminta melalui dapatkan file contohnya. Jika awalan tidak menggunakan ~name
ekspansi, maka hal di atas tidak akan dilakukan pada y variabel, secara alami.

Typedef.U
Satuan ini menghasilkan $typedef variabel shell, digunakan secara internal oleh Konfigurasi untuk memeriksa
apakah typedef ada atau tidak. Penggunaan yang khas adalah:

setel typedef val_t default [ termasuk ]
evaluasi $typedef

Ini akan mengatur variabel val_t dengan nilai kegagalan jika typedef tidak ditemukan
di antara yang terdaftar termasuk file, atau untuk mengetik jika ketemu. Jika tidak ada file sertakan adalah
ditentukan, unit terlihat dalam hanya. Jika Anda menentukan beberapa termasuk, hanya
mereka melihat.

Unix.U
Tujuan dari unit ini adalah untuk mendefinisikan beberapa UNIX-isme yang paling umum melalui variabel
yang dapat diubah dari baris perintah atau melalui file petunjuk yang tepat. Secara khusus,
$_exe, $_o dan $_a diatur. Semua unit harus mengacu pada $_o dan tidak .o langsung.
NS '.' merupakan bagian dari variabel tersebut.

Setvar.U
Unit ini menghasilkan variabel, yang digunakan secara internal oleh Konfigurasi untuk mengatur a
menetapkan/ nilai undef ke simbol yang diberikan, memancarkan peringatan ketika tiba-tiba berubah
dari nilai sebelumnya. Contohnya:

val="$tentukan"
atur d_variabel
evaluasi $setvar

Jika sebelumnya $d_variabel nilainya bukan nol dan $val berbeda, "wah"
peringatan dikeluarkan.

Wah.U
Satuan ini menghasilkan whoa skrip, yang mengeluarkan peringatan ketika nilai dalam variabel
siapa namanya? $var tidak sama dengan nilai lama sebelumnya yang dipegang $dahulu. Atas
kembali, $td dan $tu memegang nilai yang tepat untuk menetapkan or tidak pasti variabel. Lihat
contoh dalam Inlibc.U.

bawaan Pra-prosesor
Setiap unit untuk dimasukkan ke dalam Konfigurasi dijalankan melalui pra-prosesor bawaan. Pra-
pernyataan prosesor diperkenalkan oleh karakter '@' ('#' adalah komentar shell
karakter). Ini berfungsi hanya seperti pra-prosesor C tetapi memungkinkan untuk shell dan perl
lolos. Berikut adalah fungsi yang tersedia:

@jika ekspresi
If ekspresi benar, lanjutkan memuat kode hingga @end, @elsif atau @else.

@elif ekspresi
Pilihan alternatif. Jika ekspresi benar, lanjutkan memuat kode hingga @end,
lain @elsif atau @else.

@else Kode default yang akan dimuat jika @if ekspresi salah dan tidak satupun dari
opsional @elsif cocok. Muat hingga @akhir.

@end Tutup pernyataan pemuatan bersyarat yang dibuka oleh @if.

@mendefinisikan simbol
Memberi tahu pra-prosesor bahwa simbol ditentukan mulai sekarang.

bersyarat ekspresi dapat menyertakan nama simbol (nilai benar jika simbol diinginkan atau
ditentukan melalui @mendefinisikan atau shell/perl lolos. Atom-atom itu dapat digabungkan menggunakan
operator boolean tradisional '!' untuk negasi, '&&' untuk logika dan, dan '||' untuk logika
atau.

Teks yang diapit dalam tanda kurung tunggal adalah tes shell, sedangkan teks di antara tanda kurung ganda adalah
tes perl. Yaitu ungkapan:

{ tempurung teks }
{{ perl teks }}

diterjemahkan menjadi:

if tempurung teks >/dev/null 2>&1; kemudian keluar 0; lain keluar 1; fi
if (perl teks) {keluar 0;} lain {keluar 1;}

dan status keluar digunakan dengan cara standar untuk mendapatkan nilai boolean, yaitu 0 benar dan
segala sesuatu yang lain adalah palsu. Perhatikan bahwa hanya kondisi sederhana yang dapat diekspresikan dalam perl, sampai
beberapa kode kompleks dapat dimuat di dalam metakonfigurasi dan dieksekusi.

Pra-prosesor bawaan dapat digunakan untuk menyempurnakan beberapa unit (lihat d_gethname.U untuk
contoh kompleks) tergantung pada simbol yang sebenarnya digunakan oleh program atau file
hadir dalam distribusi. Misalnya, Konfigurasi lama.U menggunakan tes seperti:

@jika {test -d ../hints}

dan Konfigurasi akan berisi kode yang bergantung pada petunjuk hanya jika ada petunjuk direktori dalam
direktori tingkat atas paket. Perhatikan bahwa tes dijalankan dari dalam '.MT' direktori,
maka diperlukan '../' dalam pengujian.

Pra-prosesor juga dapat digunakan untuk menghindari meletakkan kode yang tidak berguna ketika simbol tidak
didefinisikan. Unit yang mendefinisikan lebih dari satu simbol dapat dilindungi dengan cara itu (karena unit adalah
dimuat secara keseluruhan) dengan mengumpulkan kode yang bergantung pada simbol dalam pasangan @if/@end. Untuk
contoh:

@jika saya_TIME || J_SYS_TIME || I_SYS_TIME_KERNEL
need_time_h='benar'
@lain
need_time_h='salah'
@akhir

akan menguji apakah kode sumber menggunakan salah satu dari tiga simbol yang mengontrol
itu waktu.h or sys/time.h inklusi dan tentukan simbol shell yang sesuai. Itu memberi
Konfigurasi umpan balik tentang apa yang dibutuhkan sumber dan menghindari kelemahan karena telah diperbaiki
unit beku.

Melalui garis '?W:', Anda bisa mendapatkan kombinasi yang menarik. Misalnya, i_time.U satuan
perlu tahu apakah sumber C memanfaatkan struktur zona Tipe. Karena itu,
garis:

?W::zona waktu

digunakan untuk efek sampingnya dalam mendefinisikan simbol zona untuk pra-prosesor. NS
kode unit kemudian dapat mengatakan:

@jika zona waktu
untuk s_timezone di '-DS_TIMEZONE' ''; melakukan
@lain
s_timezone=''
@akhir

... kode menggunakan s_timezone ...

@jika zona waktu
dilakukan
@akhir

dan memiliki loop ekstra mencoba dua nilai berturut-turut untuk s_zona waktu variabel, tetapi hanya
jika diperlukan.

Usang Simbol
Simbol usang dipertahankan untuk memudahkan transisi dengan yang lebih lama metakonfigurasi unit. Kecuali
itu -o sakelar diteruskan ke metakonfigurasi mereka akan diabaikan. Namun, sebuah Usang file akan
dihasilkan, memberi tahu Anda file mana yang menggunakan simbol-simbol usang itu dan apa
adalah simbol baru yang akan digunakan.

Masa pakai untuk simbol usang adalah satu revisi penuh, yaitu mereka akan dihapus ketika
revisi dasar berikutnya dikeluarkan (pembaruan tambalan tentu saja tidak dihitung). Oleh karena itu,
bijaksana untuk menerjemahkan sumber Anda dan mulai menggunakan simbol baru sesegera mungkin.

Konfigurasi Petunjuk
Mungkin saja logika konfigurasi internal membuat pilihan yang salah. Untuk
misalnya, pada beberapa platform, garpu() panggilan sistem ada tetapi rusak, jadi seharusnya
tidak digunakan. Tidak mungkin memasukkan pengetahuan itu ke dalam unit itu sendiri, karena
itu mungkin masalah sementara yang pada akhirnya akan diperbaiki oleh vendor, atau sesuatu yang
diperkenalkan oleh upgrade OS baru.

Bagaimanapun, untuk semua masalah kecil yang terlalu khusus untuk sistem, metakonfigurasi
menyediakan dukungan file petunjuk. Untuk menggunakannya, Anda perlu membuat petunjuk direktori dalam
direktori tingkat atas paket, dan memilikinya saat Anda menjalankan metakonfigurasi. Itu akan memuat
bagian terkait petunjuk dari Konfigurasi lama.U.

Sejak saat itu, Anda dapat mengatur terlebih dahulu beberapa variabel shell Konfigurasi digunakan dalam OS khusus
file .sh. Ada kode di Konfigurasi lama.U yang mencoba menebak file petunjuk mana yang dibutuhkan oleh
menghitung nama standar berdasarkan nama OS sistem, nama kernel, rilis
nomor, dll... Karena informasi ini mungkin berubah dengan cepat, saya tidak mendokumentasikannya
di sini. Anda harus merekayasa balik kode dari Konfigurasi lama.U.

Saat Anda pertama kali merilis paket Anda, direktori file petunjuk Anda harus kosong. jika
pengguna paket Anda mengeluh bahwa mereka memiliki masalah dengan Konfigurasi default pada a
sistem tertentu, Anda harus melihat apakah ini masalah khusus platform atau a
yang umum. Dalam kasus sebelumnya, saatnya untuk memperkenalkan file petunjuk baru, sementara di
terakhir, unit terkait harus direvisi.

Misalnya, sistem SGI diketahui rusak garpu() panggilan sistem, mulai ini
menulis. Dan nama file petunjuk yang sesuai adalah sgi.sh. Jadi yang perlu Anda lakukan hanyalah membuat
a petunjuk/sgi.sh file tempat Anda menulis:

d_vfork="$tentukan"

yang akan selalu remap garpu on garpu (Lihat d_vfork.U). Saat berjalan pada sistem SGI untuk
pertama kali, Konfigurasi akan mendeteksi adanya petunjuk/sgi.sh file, dan bahwa kita berada di
mesin IRIX (nama kernel sering /irix), oleh karena itu ia akan mengusulkan sgi sebagai
petunjuk yang mungkin. Jika pengguna menerimanya, dan karena $d_vfork nilai diubah melalui
$setvar panggilan, a wah! akan dipancarkan untuk memperingatkan bahwa kita akan mengganti nilainya
dihitung oleh Konfigurasi.

Perhatikan bahwa Anda tidak harus menyediakan semua petunjuk yang diketahui oleh Konfigurasi lama.U. Jika file petunjuk adalah
hilang, itu tidak akan diusulkan sebagai pilihan yang memungkinkan. Tes heuristik dijalankan untuk menghitung
calon petunjuk yang mungkin terkelupas. Jika Anda memiliki nilai baru atau tes yang berbeda, silakan
kirim ke saya...

Utama Pilihan
Jika Anda membuat file config.over file di direktori tingkat atas, Konfigurasi akan menanyakan apakah Anda
ingin memuatnya untuk mengganti nilai default. Ini dilakukan sebelum pembuatan
config.sh file, sehingga memberi Anda kesempatan untuk menambal nilai yang tersimpan di sana.

Ini berbeda dari pendekatan petunjuk karena ini adalah file lokal, yang merupakan pengguna
bebas berkreasi untuk digunakan sendiri. Anda tidak harus menyediakan file seperti itu sendiri, tetapi biarkan
pengguna tahu tentang kemungkinan ini.

Konfigurasi Opsi
Grafik Konfigurasi skrip dapat dipanggil dengan beberapa opsi yang ditentukan pada baris perintah, untuk
sedikit mengubah perilakunya. Berikut adalah opsi yang diizinkan:

-d Gunakan default untuk semua jawaban.

-e Lanjutkan tanpa mempertanyakan produksi config.sh.

-f fillet Gunakan file yang ditentukan sebagai konfigurasi default. Jika sakelar ini tidak digunakan,
konfigurasi diambil dari config.sh, saat hadir.

-h Cetak pesan bantuan dan keluar.

-r Gunakan kembali nilai simbol C jika memungkinkan. Ini akan melewatkan yang mahal nm simbol
ekstraksi. Jika digunakan pertama kali (tanpa file konfigurasi sebelumnya),
Konfigurasi akan mencoba mengkompilasi dan menautkan program kecil untuk mengetahui tentang
ada atau tidak adanya simbol.

-s Mode diam. Hanya string yang dicetak pada deskriptor file #4 yang akan terlihat di
layar (itu pesan penting). Tidak mungkin untuk mematikan sepenuhnya
keluaran apa pun, tetapi Anda dapat menggunakan 'Konfigurasi -ders > / dev / null 2> & 1' agar kenyang
batch dijalankan tanpa output dan tidak diperlukan interaksi pengguna.

-D simbol = nilai
Mendefinisikan sebelumnya simbol untuk menanggung yang ditentukan nilai. Hal ini juga memungkinkan untuk menggunakan '-D
simbol' yang akan menggunakan nilai default 'define'.

-E Berhenti di akhir pertanyaan konfigurasi, setelah menghasilkan a
config.sh. Ini tidak akan melakukan 'membuat tergantung' atau ekstraksi file .SH.

-K Pengguna yang berpengetahuan. Saat Anda menggunakan opsi ini, Anda tahu apa yang Anda lakukan dan
oleh karena itu config.sh file akan selalu ditangani seolah-olah itu dimaksudkan untuk menjadi
digunakan kembali, meskipun mungkin telah dihasilkan pada sistem alien. Juga
mencegah aborsi ketika Konfigurasi mendeteksi kompiler C yang tidak dapat digunakan atau set yang salah
dari bendera C. Pintasan lebih lanjut mungkin diaktifkan oleh opsi ini juga di
masa depan. Opsi ini didokumentasikan dalam Konfigurasi pesan penggunaan, untuk mengingatkan kami
tentang keberadaannya, tetapi deskripsi yang diberikan diharapkan cukup samar.
:-)

-O Izinkan nilai yang ditentukan melalui a -D or -U untuk mengganti pengaturan dari semua yang dimuat
berkas konfigurasi. Ini bukan perilaku default karena perintah utama
tidak disebarkan ke variabel yang diturunkan dari variabel yang saat ini Anda ubah.
Secara alami, tanpa -O, pengaturan hanya dilakukan ketika tidak ada file konfigurasi
dimuat, yang aman karena variabel turunan belum dihitung ...

-S Lakukan substitusi variabel pada semua file .SH. Anda dapat menggabungkannya dengan
-f beralih untuk menyebarkan konfigurasi apa pun yang Anda suka.

-U simbol =
Pra-set simbol untuk menanggung nilai kosong. Hal ini juga memungkinkan untuk menggunakan '-U simbol'
yang akan ditetapkan simbol untuk 'tidak def'.

-V Cetak nomor versi dari metakonfigurasi yang menghasilkan ini Konfigurasi naskah
dan keluar.

Running Lingkungan Hidup
Saat memulai, Konfigurasi menciptakan lokal UU direktori dan berjalan dari sana. Direktori
dihapus ketika Konfigurasi berakhir, tetapi ini berarti Anda harus menjalankan skrip dari tempat
Anda dapat menulis, yaitu bukan dari sistem file read-only.

Anda bisa lari Konfigurasi dari jarak jauh, seperti pada:

../paket/Konfigurasi

untuk mengkonfigurasi sumber yang tidak ada secara lokal. Semua file yang dihasilkan akan dimasukkan
direktori tempat Anda menjalankan skrip. Keajaiban ini dilakukan berkat src.U
unit, yang mengatur $src dan $rsrc variabel untuk menunjuk ke sumber paket. Itu
jalur penuh atau relatif, tergantung pada apakah Konfigurasi dipanggil melalui or penuh
Jalur relatif.

Dari dalam UU subdirektori, Anda dapat menggunakan $rsrc untuk mengakses file sumber (unit
merujuk ke file sumber, petunjuk tautan harus selalu menggunakan mekanisme ini dan tidak menganggap
file ada di direktori induk). Semua Makefile harus menggunakan variabel $src
sebagai penunjuk ke sumber dari atas direktori build (di mana Konfigurasi dijalankan),
baik secara langsung atau melalui pengaturan VPATH.

Saat berlari Konfigurasi dari jarak jauh, file .SH diekstraksi di direktori build, bukan
di pohon sumber. Namun, itu membutuhkan semacam membuat dukungan untuk dapat mengkompilasi
hal-hal dalam direktori build sementara sumbernya terletak di tempat lain.

Menggunakan Sihir Definisi ulang
Dengan memanfaatkan -M switch, beberapa pemetaan ulang ajaib mungkin terjadi dalam a confmagic.h
mengajukan. File itu perlu dimasukkan setelah konfigurasi.h, tentu saja, tetapi juga
lain yang diperlukan termasuk file. Yaitu:

#sertakan "config.h"
...
... lain inklusi ...
...
#sertakan "confmagic.h"

Biasanya, confmagic.h akan mencoba untuk memetakan kembali bsalin() on memcpy() jika tidak bsalin() is
tersedia secara lokal, atau ubah garpu ke garpu bila perlu, maka membuatnya tidak berguna untuk
peduli tentang HAS_VFORK simbol.

Keajaiban konfigurasi ini didokumentasikan dalam file Glosarium.

Satuan template
Ada satu set templat unit di metakonfigurasi direktori sumber, yang dimaksudkan untuk
digunakan oleh program (belum ditulis) untuk menghasilkan unit baru dengan cepat untuk berbagai jenis
situasi. Tidak ada dokumentasi untuk proyek yang belum selesai ini, tetapi saya pikir saya akan menyebutkannya
di halaman manual jika Anda ingin melakukannya sendiri dan kemudian berkontribusi...

PENULIS


Larry Wall[email dilindungi]> untuk versi 2.0.
Harlan Stenn[email dilindungi]> untuk ekstensi unit penting.
Raphael Manfredi[email dilindungi]>.
Banyak kontributor lain untuk metakonfigurasi unit. Lihat file kredit untuk daftar.

Gunakan metaconfig online menggunakan layanan onworks.net


Server & Workstation Gratis

Unduh aplikasi Windows & Linux

Perintah Linux

Ad