Το αρχείο rules
Το αρχείο rules είναι το πιο σημαντικό αρχείο και είναι αυτό που πρακτικά ευθύνεται για την δημιουργία του πακέτου. Θα εξηγήσουμε τα περιεχόμενά του ανά τμήματα:
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
Απλά κάποια σχόλια για την δημιουργία του αρχείου...
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
Αν αφαιρέσετε το χαρακτήρα '#', η περιγραφή της κατασκευής του πακέτου θα είναι πιο περιφραστική.
# These are used for cross-compiling and for saving the configure script
# from having to guess our platform (since we know it already)
DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
Προς το παρόν δε θα πρέπει να σας απασχολήσουν, οι εντολές αυτές αφορούν αποκλειστικά την δυνατότητα cross-compiling του πακέτου (δηλαδή, κατασκευή του σε αρχιτεκτονική διαφορετικής από την αρχιτεκτονική προορισμού).
CFLAGS = -Wall -g
Με αυτόν τον τρόπο μπορείτε να παραμετροποιήσετε τις επιλογές του μεταγλωττιστή gcc, π.χ. για παραγωγή βελτιστοποιημένου κώδικα (-altivec, -mcpu=686, κλπ) ή για μεγαλύτερη αυστηρότητα κατά την μεταγλώττιση (-ansi, -pedantic, -Werror, κλπ)
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
CFLAGS += -O0
else
CFLAGS += -O2
endif
Η βελτιστοποίηση του κώδικα, αν και θα μπορούσε να μπει απευθείας στη μεταβλητή CFLAGS παραπάνω, μπορεί να αυτοματοποιηθεί με τη χρήση της μεταβλητής περιβάλλοντος $DEB_BUILD_OPTIONS. Αν αυτή περιέχει τη λέξη noopt, τότε ο κώδικας που θα παραχθεί από τη μεταγλώτιση με τον gcc, δεν θα είναι βελτιστοποιημένος, διαφορετικά (σε κάθε άλλη περίπτωση δηλαδή, που είναι και η προκαθορισμένη συμπεριφορά), θα υπάρχει βελτιστοποίηση του κώδικα με την επιλογή -O2.
config.status: configure
dh_testdir
# Add here commands to configure the package.
CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man
--infodir=\$${prefix}/share/info --with-qt-includes=/usr/include/qt3
Στα πακέτα που χρησιμοποιούν τα εργαλεία auto* (autoconf, automake, κλπ), το πρώτο στάδιο πριν τη μεταγλώττιση είναι η παραμετροποίηση/ρύθμιση του περιβάλλοντος μεταγλώττισης εκτελώντας το σενάριο ./configure με τις κατάλληλες παραμέτρους. Η πιο σημαντική παράμετρος από αυτές, όσον αφορά την κατασκευή του πακέτου για χρήστη στο Debian, είναι η --prefix=/usrmake install θα εγκατασταθούν κάτω από την ιεραρχία /usr. Αυτό κανονικά δε θα έπρεπε να είναι απαραίτητο, αλλά πολλές φορές τα προγράμματα έχουν αρχεία ρυθμίσεων στα οποία γράφουν τις διαδρομές (paths) αυτές των καταλόγων και αν δεν δίναμε ως πρόθεμα το /usr, τα αρχεία ρυθμίσεων θα ανέφεραν τον τρέχοντα κατάλογο στον οποίον γίνεται η κατασκευή του πακέτου (π.χ. κάποιο home directory).
build: build-stamp
build-stamp: config.status
dh_testdir
# Add here commands to compile the package.
$(MAKE)
touch build-stamp
Αφού γίνει η παραμετροποίηση με το ./configure, το πρόγραμμα κατασκευής του πακέτου θα καλέσει τον κανόνα build, κατά τον οποίο γίνεται η μεταγλώττιση του πακέτου. Το αρχείο build-stamp αποτελεί κατά κάποιον τρόπο ένα ορόσημο, δηλαδή, όταν τελειώσει η μεταγλώττιση, θα δημιουργηθεί ένα κενό αρχείο build-stamp ώστε αν θέλετε να επαναλάβετε κάποιο μετέπειτα στάδιο της διαδικασίας (για λόγους debugging κατά την κατασκευή του πακέτου) να μη χρειάζεται να επαναλάβετε όλα τα στάδια από την αρχή αλλά να συνεχίσετε σε βήματα.
clean:
dh_testdir
dh_testroot
rm -f build-stamp
# Add here commands to clean up after the build process.
-$(MAKE) distclean
ifneq "$(wildcard /usr/share/misc/config.sub)" ""
cp -f /usr/share/misc/config.sub config.sub
endif
ifneq "$(wildcard /usr/share/misc/config.guess)" ""
cp -f /usr/share/misc/config.guess config.guess
endif
dh_clean
Ο κανόνας clean επαναφέρει το πακέτο στην αρχική του κατάσταση, διαγράφοντας οποιοδήποτε αρχείο έχει ξεμείνει από τα στάδια της παραμετροποίησης, μεταγλώττισης ή εγκατάστασης.
install: build
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs
# Add here commands to install the package into debian/kalbum.
$(MAKE) install DESTDIR=$(CURDIR)/debian/kalbum
Μετά τον κανόνα build (για τον οποίον είπαμε ότι γίνεται έλεγχος με χρήση του αρχείου build-stamp), έχουμε τον κανόνα install. Φυσικά, δεν εννοούμε την εγκατάσταση του πακέτου στο ίδιο το σύστημα αλλά σε έναν κατάλογο μέσα στον κατάλογο debian/, όπως έχουμε αναφέρει σε προηγούμενη ενότητα. Αυτό επιτυγχάνεται με ένα τέχνασμα, χρησιμοποιούμε την μεταβλητή $DESTDIR, η οποία χρησιμοποιείται από το Makefile του πακέτου (ειδικά όταν έχουμε Makefile παραγόμενο από σενάριο configure) ως κατάλογος προορισμού εγκατάστασης.
Σημειώστε ότι πριν προχωρήσουμε στην εγκατάσταση κάνουμε έναν καθαρισμό του καταλόγου debian/ (με την dh_clean -k).
# Build architecture-independent files here.
binary-indep: build install
# We have nothing to do by default.
Αγνοείστε αυτές τις γραμμές, εκτός αν έχετε να δημιουργήσετε κάποια αρχεία που είναι ανεξάρτητα αρχιτεκτονικής (π.χ. TeX/LaTeX αρχεία, κλπ).
# Build architecture-dependent files here.
binary-arch: build install
dh_testdir
dh_testroot
dh_installchangelogs ChangeLog
dh_installdocs
dh_installexamples
dh_installmenu
dh_installman
dh_link
dh_strip
dh_compress
dh_fixperms
dh_installdeb
dh_shlibdeps
dh_gencontrol
dh_md5sums
dh_builddeb
Το τελικό στάδιο είναι η δημιουργία του ίδιου πακέτου (δηλαδή του αρχείου .debman dh_fixperms).
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install
Αγνοείστε επίσης αυτές τις γραμμές.
Συνοψίζοντας, το αρχείο rules δεν είναι παρά ένα αρχείο Makefile, οπότε αν θέλετε πραγματικά να έχετε περισσότερο έλεγχο στον τρόπο που θα κατασκευάσετε το πακέτο σας, συνιστάται να εγκαταστήσετε τα πακέτα make, make-doc καθώς και να δείτε τα αρχεία rules άλλων πακέτων.
Active forum topics
- Wake up from suspend mode failed
- Οργάνωση στις μεταφράσεις των ελληνικών στο Debian.
- απορια σχετικα με nvidia440
- πρόβλημα εγκατάστασης nvidia driver GTS250.
- kernel 2.6.38 για squeeze
- Gnome3
- 2 μήνες σπασμένο το upgrade σε unstable [SOLVED]
- Οι χρήστες του Internet Explorer είναι χαζοί;
- Debian Lenny + Nvidia drivers
- εγκατασταση usb cosmote
New forum topics
Νέοι χρήστες
- kountp
- Adonthegreat
- giorgos_m
- prodromos
- airmaik
Οι πιο πρόσφατες καταχωρίσεις blog.
- Fosscomm 2012
- armhf officially into Debian!
- back from UDS/Linaro Connect...
- FTF is over, Linaro Interview
- straight from FTF 2011, San Antonio...
- Όσο μεγαλώνεις μαθαίνεις...
- Emdebian 2011 Sprint report, Genesi Europe store goes online...
- Θεσσαλονίκη - open source ERP workshop
- Χρήσιμο URL για Flash Cards και Linux filesystems
- Cambridge, UK, ARM HQ for Emdebian 2011 Sprint