Ho un codice C che è stato scritto per Linux e si basa su socket e arpa/inet.h e su libusb.h e voglio compilare questo per Windows sotto MinGW. (Si noti che il progetto corrente ha solo un Makefile molto semplice e non si basa affatto sugli autotools).Introduzione a gnulib su MinGW e non familiare (sufficiente) con gli autotools
Sembra che usare gnulib sia un buon modo per compilare questo per Windows sotto MinGW e ho iniziato in quella direzione, ma sembra che se non si ha molta familiarità con gli autotools si entra le erbacce profonde molto rapidamente.
Quindi, ecco che cosa ho provato:
$ gnulib-tool --import getsockname,getsockopt,setsockopt,socket,socketlib,sockets,socklen,sys_socket,arpa_inet,inet_ntop,inet_pton,netinet_in
Corre e mi dà il seguente messaggio alla fine:
Don't forget to
- add "lib/Makefile" to AC_CONFIG_FILES in ./configure.ac,
- mention "lib" in SUBDIRS in Makefile.am,
- mention "-I m4" in ACLOCAL_AMFLAGS in Makefile.am,
- mention "m4/gnulib-cache.m4" in EXTRA_DIST in Makefile.am,
- invoke gl_EARLY in ./configure.ac, right after AC_PROG_CC,
- invoke gl_INIT in ./configure.ac.
Ok, non avevo configure.ac né un Makefile. am, così ho creato nel modo seguente (secondo le istruzioni di cui sopra):
$ cat Makefile.am
SUBDIRS = lib
ACLOCAL_AMFLAGS = -I m4
EXTRA_DIST = m4/gnulib-cache.m4
E ...
0.123.$ cat configure.ac
AC_INIT([configure.ac])
AC_CONFIG_FILES([lib/Makefile])
AC_PROG_CC
gl_EARLY
gl_INIT
Ora, a questo punto, i documenti di gnulib sembrano presumere che tu sia intimamente familiare con gli autotools, quindi lasciano fuori tutte le istruzioni per ciò che devi fare con gli autotools successivi.
Da quello che ho potuto capire dalla lettura vari forum, sembra che i prossimi passi sono per eseguire:
$ aclocal
$ autoconf
$ automake
$ configure
però ... quando mi sono imbattuto automake ho ottenuto:
$ automake
configure.ac: no proper invocation of AM_INIT_AUTOMAKE was found.
configure.ac: You should verify that configure.ac invokes AM_INIT_AUTOMAKE,
configure.ac: that aclocal.m4 is present in the top-level directory,
configure.ac: and that aclocal.m4 was recently regenerated (using aclocal).
lib/Makefile.am:30: library used but `RANLIB' is undefined
lib/Makefile.am:30: The usual way to define `RANLIB' is to add `AC_PROG_RANLIB
' lib/Makefile.am: 30: a configure.ac' and run
autoconf' di nuovo.
Hmmm ... Ok probabilmente sono solo alcune cose che mi mancano nel mio Makefile.am (perché non sono del tutto sicuro di cosa dovrebbe andare in un Makefile.am) ... quindi tornando indietro di un passo .. . dovrei essere in grado di eseguire il file di configurazione che ha ottenuto creato in precedenza nel passaggio autoconf:
$ ./configure
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.exe
checking for suffix of executables... .exe
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
./configure: line 2497: gl_EARLY: command not found
./configure: line 2498: gl_INIT: command not found
rm: cannot lstat `conftest.exe': Permission denied
da quello che ho letto da googling intorno sembra che la gl_EARLY e gl_INIT dovrebbe essere prendersi cura dalla linea aggiunto al file Makefile.am (ACLOCAL_AMFLAGS = -I m4), ma a questo punto non sono completamente sicuro che sto facendo correttamente la parte degli autotools. Qualcuno può far notare cosa sto facendo male qui?