Newsgroup: it.comp.os.linux.development
Titolo: autotools e gtk

ciao a tutti ho scritto un primo abbozzo di un giochino in gtk/gdk e anche
se ancora rudimentale credo sia abbastanza maturo da cominciare a
distribuirlo.
il problema e' che non ho mai pubblicato nulla di quello che ho
programmato e ora mi trovo in difficolta' con la creazione del pacchetto.
qualcuno sa dove posso trovare un buon tutorial su autoconf automake ecc?
ho trovato qualcosa ma erano sempre o troppo sbrigativi o troppo
approfonditi. non ho voglia di stare a studiarmi le varie macro una per
una. mi servirebbe tipo un 
configure.in
 e Makefile.am di base da cui
partire con magari le macro per le poche librerie che utilizzo (glib, gtk,
gdk, gdk-pixbuf, cairo e pango). sapete dove posso trovare qualche esempio
senza sbattermici troppo?
-- 
[Filippo...........................]
[Linux User #342745................]
        ==[...penguin powered...]==

 ho trovato qualcosa ma erano sempre o troppo sbrigativi o troppo
]zac[
Partire da zero con gli autotools è peggio del parapendio senza sistemi di
frenata, ti conviene fare come fanno tutti, prendere un pacchetto che usi
più o meno le cose che sono usate dal tuo programma e che sia il più
piccolo possibile, e scopiazzare a mani basse.
Anche perchè le auto-configurazioni di programmi per kde/gnome/ecc. di
solito richiedono un sacco di script/configurazioni aggiuntive.

> qualcuno sa dove posso trovare un buon tutorial su autoconf automake ecc?
Ti propongo di seguito uno script perl che ho realizzato a mio uso e 
consumo; dovresti lanciarlo prima (virtualmente) di iniziare lo sviluppo 
del progetto. Nulla ti vieta di usarlo per crearlo vuoto e poi 
trasferirci dentro il tuo codice...
Lo script  ti chiederà le seguenti informazioni:
Project name:
Author name:
email:
One-line package description:
Sulla base di queste ti creerà un progetto vuoto in cui il main è 
contenuto nel file C  "$prjName".c
Non ho mai fatto nulla (di serio) con le gtk, quindi  probabilmente 
dovrai aggiungere a mano gli appositi check nel 
configure.in
.
In caso trovassi le info necessarie, fammi sapere, così adatto anche lo 
script.
Ti viene creata, inoltre, una directory $prjName/$prjName-0.1/debian, 
con degli stub per creare il pacchetto debian. Nel caso
migliore, se utilizzi una debian-based, ti basterà entrare nella dir con 
il pacchetto e dare un bel
dpkg-buildpackage -rfakeroot
per avere bello e pronto un pacchetto *.deb binario da distribuire. 
N.B.: devi avere installato il comando '822-date'
Hope this helps,
p.
<code>
#!  /usr/bin/perl
# Paolo Lulli 2005
# 
http://www.lulli.net
#
# Automatize the creation of Makefile.am & 
config.in
 plus
# directory structure to adopt GNU 'autotools' for
# portable distribution of code.
#
# This code is released under GNU/GPL
print "Project name: ";
my $prjName;
chomp($prjName=<STDIN>);
$prjNameWithVers=$prjName."-0.1";
print "Author name: ";
chomp($author=<STDIN>);
print "email: ( address\\\@
domain.com
 )";
chomp($email=<STDIN>);
print "One-line package description:";
chomp($one_line_desc=<STDIN>);
#($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
#$year+=1900;
#$time_string = localtime();
# $time_string=~s/^(\w{3})/$1,/;
#$time_string.=" +0200";
#$time_string=system("822-date");
$time_string=`822-date`;
$mainC=<<EOF;
#include<stdio.h>
#include "common.h"
#include <unistd.h>
/*
   $prjName
   $one_line_desc
   $author ($email)
*/
void usage(char *prog_name);
void version(void);
int
main (int argc, char *argv[])
{
   int c;
   while ((c = getopt (argc, argv, "vp:")) != -1)
     {
       switch (c)
	{
	case 'v':
	  version ();
	  break;
	case 'p':
	  printf ("\t Prova con parametro %s", optarg);
	  break;
	}
     }
}
void
version (void)
{
   printf ("\t Copyright $author ($email) \\n");
}
void
usage(char *prog_name){
   printf("Usage:\\n");
   printf("%s: <args>\\n", prog_name);
}
EOF
$common_dot_h=<<EOF;
//common.h
EOF
$makefileRootAM=<<EOF;
SUBDIRS = src \#doc
EOF
$makefileSrcAM=<<EOF;
bin_PROGRAMS = $prjName
$prjName\_SOURCES = $prjName.c
EOF
$makefileDocAM=<<EOF;
info_TEXINFOS = $prjName.texi
$prjName\_TEXINFOS = $prjName.texi version.texi fdl.texi
EOF
$configRootIN=<<EOF;
dnl Process this file with autoconf to produce a configure script.
AC_INIT(src/$prjName.c)
AM_INIT_AUTOMAKE($prjName, 1.0)
#     AM_CONFIG_HEADER(config.h)
dnl Set of available languages.
ALL_LINGUAS="de fr es ko nl no pl pt sl sv it"
dnl Checks for programs.
AC_PROG_CC
AC_ISC_POSIX
dnl Checks for libraries.
dnl Checks for header files.
AC_STDC_HEADERS
AC_HAVE_HEADERS(string.h fcntl.h sys/file.h sys/param.h)
dnl Checks for library functions.
AC_FUNC_ALLOCA
AC_OUTPUT( Makefile doc/Makefile src/Makefile  )
EOF
$docTexiMainVersion=<<EOF;
\@set UPDATED 5 November 2005
\@set UPDATED-MONTH November 2005
\@set EDITION 1.0
\@set VERSION 1.0
EOF
$docTexiMain=<<EOF;
\\input texinfo   \@c -*-texinfo-*-
\@comment %**start of header
\@setfilename $prjName.info
\@include version.texi
\@settitle $prjName \@value{VERSION}
\@syncodeindex pg cp
\@comment %**end of header
\@copying
This manual is for $prjName
(version \@value{VERSION}, \@value{UPDATED}),
Copyright \@copyright{} 2005 $author
\@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with the Front-Cover Texts being $prjName,''
and with the Back-Cover Texts as in (a) below.  A copy of the
license is included in the section entitled GNU Free Documentation
License.''
(a) The FSF's Back-Cover Text is: You have freedom to copy and modify
this Manual.''
\@end quotation
\@end copying
\@dircategory Texinfo documentation system
\@direntry
* $prjName: ($prjName)Invoking sample.
\@end direntry
\@titlepage
\@title $prjName
\@subtitle for version \@value{VERSION}, \@value{UPDATED}
\@author $author (\@email{$email})
\@page
\@vskip 0pt plus 1filll
\@insertcopying
\@end titlepage
\@contents
\@ifnottex
\@node Top
\@top $prjName
\@insertcopying
\@end ifnottex
\@menu
* Invoking $prjName::
* Copying This Manual::
* Index::
\@end menu
\@node Invoking $prjName
\@chapter Invoking $prjName
\@pindex $prjName
\@cindex invoking \@command{$prjName}
$prjName Manual
\@node Copying This Manual
\@appendix Copying This Manual
\@menu
* GNU Free Documentation License::  License for copying this manual.
\@end menu
\@comment \@include fdl.texi
\@node Index
\@unnumbered Index
\@printindex cp
\@bye
EOF
$deb_control=<<EOF;
Source: $prjName
Section: text
Priority: optional
Maintainer: $author <$email>
Standards-Version: 3.5.8
Build-Depends: debhelper (>> 3.0.0)
Package: $prjName
Architecture: any
Depends: debmake
Suggests:
Description: $one_line_desc
  Here goes a longer package description,
  starting from column 2...
EOF
$deb_copyright=<<EOF;
copyright...
EOF
$deb_changelog=<<EOF;
$prjName (1.0-1) unstable; urgency=low
   * Initial Release.
  -- $author <$email>  $time_string
EOF
$deb_rules=<<EOF;
#!/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)
CFLAGS = -Wall -g
ifneq (,\$(findstring noopt,\$(DEB_BUILD_OPTIONS)))
	CFLAGS += -O0
else
	CFLAGS += -O2
endif
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
build: build-stamp
build-stamp:  config.status
	dh_testdir
	# Add here commands to compile the package.
	\$(MAKE)
	#docbook-to-man debian/\$prjName.sgml > \$prjName.1
	touch build-stamp
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
install: build
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs
	# Add here commands to install the package into debian/\$prjName.
	#\$(MAKE) install DESTDIR=\$(CURDIR)/debian/\$prjName
	\$(MAKE) install DESTDIR=\$(CURDIR)/debian/tmp
# Build architecture-independent files here.
binary-indep: build install
# We have nothing to do by default.
# Build architecture-dependent files here.
binary-arch: build install
	dh_testdir
	dh_testroot
	dh_installchangelogs ChangeLog
	dh_installdocs
	dh_installexamples
#	dh_install
#	dh_installmenu
#	dh_installdebconf	
#	dh_installlogrotate
#	dh_installemacsen
#	dh_installpam
#	dh_installmime
#	dh_installinit
#	dh_installcron
#	dh_installinfo
	dh_installman
	dh_link
	dh_strip
	dh_compress
	dh_fixperms
#	dh_perl
#	dh_python
#	dh_makeshlibs
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_md5sums
	dh_builddeb
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install
EOF
#############
$README=<<EOF;
| $prjName | by $author
$one_line_desc
EOF
$GNU_ChangeLog=<<EOF;
ChangeLog
EOF
$AUTHORS=<<EOF;
$author
EOF
$NEWS=<<EOF;
NEWS ...
EOF
$win32Env=<<EOF;
#! /bin/tcsh
##To get a non-console-window app add the -mwindows switch to the gcc 
args when linking
CC="i586-mingw32msvc-gcc"
AR="i586-mingw32msvc-ar"
CXX="i586-mingw32msvc-g++"
CPP="i586-mingw32msvc-cpp"
RANLIB="i586-mingw32msvc-ranlib"
LD="i586-mingw32msvc-ld"
export CC AR CXX RANLIB LD
EOF
mkdir($prjName);
chdir($prjName);
mkdir($prjNameWithVers);
chdir($prjNameWithVers);
mkdir("src");
mkdir("doc");
if ( open(MAKEAM,">","Makefile.am") ){
     print MAKEAM $makefileRootAM;
     close (MAKEAM);
}
if ( open(CONFIGIN, ">", "
configure.in
") ){
     print CONFIGIN $configRootIN;
     close (CONFIGIN);
}
chdir("src");
if ( open(MAKEAM,">","Makefile.am") ){
     print MAKEAM $makefileSrcAM;
     close (MAKEAM);
}
$cFile = $prjName."\.c";
if ( open(CM,">",$cFile) ){
     print CM $mainC;
     close (CM);
}
if ( open(CH,">","common.h") ){
     print CH $common_dot_h;
     close (CH);
}
chdir("..");
chdir("doc");
$texiFile = $prjName."\.texi";
if ( open(CM,">",$texiFile) ){
     print CM $docTexiMain;
     close (CM);
}
if ( open(TV,">","version.texi") ){
     print TV $docTexiMainVersion;
     close (TV);
}
if ( open(MAKEAM,">","Makefile.am") ){
     print MAKEAM $makefileDocAM;
     close (MAKEAM);
}
chdir("..");
# GNU autotools required files...
if ( open(F,">","NEWS") ){
     print F $NEWS;
     close (F);
}
if ( open(F,">","README") ){
     print F $README;
     close (F);
}
if ( open(F,">","AUTHORS") ){
     print F $AUTHORS;
     close (F);
}
if ( open(F,">","ChangeLog") ){
     print F $GNU_ChangeLog;
     close (F);
}
mkdir("debian");
chdir("debian");
if ( open(F,">","changelog") ){
     print F $deb_changelog;
     close (F);
}
if ( open(F,">","control") ){
     print F $deb_control;
     close (F);
}
if ( open(F,">","copyright") ){
     print F $deb_copyright;
     close (F);
}
if ( open(F,">","rules") ){
     print F $deb_rules;
     close (F);
}
chmod (0755, 'rules');
chdir("..");
system("aclocal && autoconf && automake -a -c"); Linux Version
</code>

 piccolo possibile, e scopiazzare a mani basse.
bene, ho risolto scopiazzando da cairo-clock che piu o meno aveva le
stesse dipendenze spero sia fattibile in termini di licenze..
ne sai/sapete qualcosa? un'altra cosa: ho modificato un'icona tango e l'ho
usata nel mio gioco (non come icona ma proprio nel gioco)
devo citare la cosa nei ringraziamenti contattare l'autore o qualosa di
simile?


 senza sbattermici troppo?
Scusami se non rispondo rigorosamente alla tua domanda, ma vorrei
suggerirti anche qualche alternativa. Ad esempio Scons o CMake. Sono
strumenti piu' facili ed altrettanto versatili in quasi tutte le
occasioni. E sono piu' moderni.
-- 
Salvatore Iovene
http://www.iovene.com/

 simile?
Vedi sopra.
Comunque di solito ogni licenza prevede la citazione e una breve descrizione
della parte riutilizzata (che poi è anche moralmente il minimo).
Contattare l'autore è necessario se si hanno dei dubbi o problemi con la
licenza utilizzata dall'autore.
P.S. Ribadisco, leggi la licenza, le opinioni di terzi valgono poco visto
che le responsabilità (e diritti) sono tutti dell'autore.