Anzeige:
Ergebnis 1 bis 2 von 2

Thema: Automake: Tag-Ersetzung in Dateien

  1. #1
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259

    Automake: Tag-Ersetzung in Dateien

    Hi,

    ich habe in einem Projekt unter anderem Skripte, die ihre Einstellungen von einer gemeinsamen Konfigurationsdatei beziehen. Da --bindir und --sysconfdir bei configure gesetzt werden können, und ich im voraus nicht weiß, wo die Skripte und Konfigurationsdateien installiert werden, habe ich den alle Pfadangaben in den Skripten durch Tags ersetzt, die ich dann wiederrum durch die von configure gesetzten Pfade ersetzen will. Die Skripte, die die Tags enthalten, haben alle die Endung ".in". Mein Makefile.am sieht zur Zeit so aus:

    Code:
    bin_FILES = ic \
                ic-fetch \
                ic-log \
                ic-play \
                ic-x
    
    sbin_FILES = ic-setup
    
    bin_SCRIPTS = $(bin_FILES)
    sbin_SCRIPTS = $(sbin_FILES)
    
    EXTRA_DIST = ic.in ic-fetch.in ic-log.in ic-play.in ic-x.in
    
    ic: 
    	sed -e "s|%bindir%|@bindir@|g" \
    		-e "s|%sbindir%|@sbindir@|g" \
    		-e "s|%sysconfdir%|@sysconfdir@|g" \
    		-e "s|%pkgdatadir%|@pkgdatadir@|g" \
    	    ic.in > ic
    
    ic-fetch:
    	sed -e "s|%bindir%|@bindir@|g" \
    		-e "s|%sbindir%|@sbindir@|g" \
    		-e "s|%sysconfdir%|@sysconfdir@|g" \
    		-e "s|%pkgdatadir%|@pkgdatadir@|g" \
    	    ic-fetch.in > ic-fetch
    
    ic-log: 
    	sed -e "s|%bindir%|@bindir@|g" \
    		-e "s|%sbindir%|@sbindir@|g" \
    		-e "s|%sysconfdir%|@sysconfdir@|g" \
    		-e "s|%pkgdatadir%|@pkgdatadir@|g" \
    	    ic-log.in > ic-log
    
    ic-play: 
    	sed -e "s|%bindir%|@bindir@|g" \
    		-e "s|%sbindir%|@sbindir@|g" \
    		-e "s|%sysconfdir%|@sysconfdir@|g" \
    		-e "s|%pkgdatadir%|@pkgdatadir@|g" \
    	    ic-play.in > ic-play
    
    ic-x: 
    	sed -e "s|%bindir%|@bindir@|g" \
    		-e "s|%sbindir%|@sbindir@|g" \
    		-e "s|%sysconfdir%|@sysconfdir@|g" \
    		-e "s|%pkgdatadir%|@pkgdatadir@|g" \
    	    ic-x.in > ic-x
    
    ic-setup: 
    	sed -e "s|%bindir%|@bindir@|g" \
    		-e "s|%sbindir%|@sbindir@|g" \
    		-e "s|%sysconfdir%|@sysconfdir@|g" \
    		-e "s|%pkgdatadir%|@pkgdatadir@|g" \
    	    ic-setup.in > ic-setup
    
    all-local: $(bin_FILES) $(sbin_FILES)
    
    clean-local:
    	rm -f $(bin_FILES) $(sbin_FILES)
    Das funktioniert zumindest Mal, sieht aber nicht gerade elegant aus.
    Zuerst würde mich interessieren, ob man einzelnen sed Aufrufe zu einem Aufruf für alle Skripte ersetzen kann, da es ja überall die gleichen sind.
    Zum Anderen bin ich mir nicht sicher, ob das so gehandhabt wird, oder ob es eine bessere Möglichkeit gibt, die Tags in den Skripte zu ersetzen ?

    Danke und Gruß,
    micha
    IRC: irc.euirc.net #tux

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.12.1999
    Ort
    Stuttgart
    Beiträge
    259
    Frage eins hat sich erledigt (Verbesserungsvorschläge sind trotzdem willkomen):

    Code:
    EXTRA_DIST = ic.in ic-fetch.in ic-log.in ic-play.in ic-x.in
    
    bin_FILES = ic \
                ic-fetch \
                ic-log \
                ic-play \
                ic-x
    
    sbin_FILES = ic-setup
    
    all_FILES = $(bin_FILES) $(sbin_FILES)
    
    all-local:
    	for p in $(all_FILES); do \
    	  sed -e "s|%bindir%|@bindir@|g" \
    		  -e "s|%sbindir%|@sbindir@|g" \
    		  -e "s|%sysconfdir%|@sysconfdir@|g" \
    		  -e "s|%pkgdatadir%|@pkgdatadir@|g" \
    	      $$p.in > $$p; \
    	done
    
    
    install-exec-local:
    	for p in $(bin_FILES); do \
    	  $(mkinstalldirs) $(DESTDIR)$(bindir); \
    	  $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/$$p; \
    	done; \
    	for p in $(sbin_FILES); do \
    	  $(mkinstalldirs) $(DESTDIR)$(sbindir); \
    	  $(INSTALL_SCRIPT) $$p $(DESTDIR)$(sbindir)/$$p; \
    	done; 
    	
    
    uninstall-local:
    	for p in $(bin_FILES); do \
    	  rm -f $(DESTDIR)$(bindir)/$$p; \
    	done; \
    	for p in $(sbin_FILES); do \
    	  rm -f $(DESTDIR)$(sbindir)/$$p; \
    	done; 
    	
    clean-local:
    	rm -f $(all_FILES)
    Bleibt aber noch die Frage, ob man das generell so machen kann, oder obs dafür eine bessere Variante gibt ?

    Gruß
    micha
    IRC: irc.euirc.net #tux

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •