Stefano Zacchiroli a écrit :
> 
> I receive a bug report for findlib that state the failure of compilation
> on m68k.
> The reason is pretty simple and already know (not for me anyway): on
> m68k ocaml optimizing compiler is not available.
> Talking with Claudio I realize that this is an old problem widely know.
> 
> What is the old adopted solution ?
> 

I do not know what it is but I myself use an autoconf generated
configure script testing whether the optimizing compiler is there or
not. Then it sets a variable OCAMLBEST to "opt" or "byte", and the
target "all" of my Makefile does ${MAKE} ${OCAMLBEST}.

Here are the configure.in and template Makefile.in I use. As it is based
on work from Jean-Christophe Filliâtre and Georges Mariano, so I have to
have their formal agreement to put it in GPL but I think there is no
problem with this (I already have the agreement of Jean-Christophe, I
will see Georges today and will ask him).
For the moment, there is no specific macro in this script. However, if
anybody is interested and I could package the tests done in configure.in
as new autoconf macros.

Sincerly yours,

Judicaël Courant.
-- 
[EMAIL PROTECTED], http://www.lri.fr/~jcourant/
(+33) (0)1 69 15 64 85
"Montre moi des morceaux de ton monde, et je te montrerai le mien"
Tim, matricule #929, condamné à mort.
http://rozenn.picard.free.fr/tim.html
# autoconf input for Objective Caml programs
# modified by Judicaël Courant from a version
# by Jean-Christophe Filliâtre, from a first script by Georges Mariano
#
# the script generated by autoconf from this input will set the following
# variables:
#   OCAMLC        "ocamlc" if present in the path, or a failure
#                 or "ocamlc.opt" if present with same version number as ocamlc
#   OCAMLOPT      "ocamlopt" (or "ocamlopt.opt" if present), or "no"
#   OCAMLBEST     either "byte" if no native compiler was found, 
#                 or "opt" otherwise
#   OCAMLDEP      "ocamldep"
#   OCAMLLEX      "ocamllex"
#   OCAMLYACC     "ocamlyac"
#   OCAMLLIB      the path to the ocaml standard library
#   OCAMLVERSION  the ocaml version number

# check for one particular file of the sources 
# ADAPT THE FOLLOWING LINE TO YOUR SOURCES!
AC_INIT(lexer.mll)

# default prefix is /usr
#AC_PREFIX_DEFAULT(/usr)

# Check for Ocaml compilers

# we first look for ocamlc in the path; if not present, we fail
AC_CHECK_PROG(OCAMLC,ocamlc,ocamlc,no)
if test "$OCAMLC" = no ; then
        AC_MSG_ERROR(Cannot find ocamlc.)
fi

# we extract Ocaml version number and library path
OCAMLVERSION=`$OCAMLC -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' `
echo "ocaml version is $OCAMLVERSION"
OCAMLLIB=`$OCAMLC -v | tail -1 | cut -f 4 -d " "`
echo "ocaml library path is $OCAMLLIB"

# then we look for ocamlopt; if not present, we issue a warning
# if the version is not the same, we also discard it
# we set OCAMLBEST to "opt" or "byte", whether ocamlopt is available or not
AC_CHECK_PROG(OCAMLOPT,ocamlopt,ocamlopt,no)
OCAMLBEST=byte
if test "$OCAMLOPT" = no ; then
        AC_MSG_WARN(Cannot find ocamlopt; bytecode compilation only.)
else
        AC_MSG_CHECKING(ocamlopt version)
        TMPVERSION=`$OCAMLOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' `
        if test "$TMPVERSION" != "$OCAMLVERSION" ; then
            AC_MSG_RESULT(differs from ocamlc; ocamlopt discarded.)
            OCAMLOPT=no
        else
            AC_MSG_RESULT(ok)
            OCAMLBEST=opt
        fi
fi

# checking for ocamlc.opt
AC_CHECK_PROG(OCAMLCDOTOPT,ocamlc.opt,ocamlc.opt,no)
if test "$OCAMLCDOTOPT" != no ; then
        AC_MSG_CHECKING(ocamlc.opt version)
        TMPVERSION=`$OCAMLCDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' `
        if test "$TMPVERSION" != "$OCAMLVERSION" ; then
            AC_MSG_RESULT(differs from ocamlc; ocamlc.opt discarded.)
        else
            AC_MSG_RESULT(ok)
            OCAMLC=$OCAMLCDOTOPT
        fi
fi

# checking for ocamlopt.opt
if test "$OCAMLOPT" != no ; then
    AC_CHECK_PROG(OCAMLOPTDOTOPT,ocamlopt.opt,ocamlopt.opt,no)
    if test "$OCAMLOPTDOTOPT" != no ; then
        AC_MSG_CHECKING(ocamlc.opt version)
        TMPVER=`$OCAMLOPTDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' `
        if test "$TMPVER" != "$OCAMLVERSION" ; then
            AC_MSG_RESULT(differs from ocamlc; ocamlopt.opt discarded.)
        else
            AC_MSG_RESULT(ok)
            OCAMLOPT=$OCAMLOPTDOTOPT
        fi
    fi
fi

# ocamldep, ocamllex and ocamlyacc should also be present in the path
AC_CHECK_PROG(OCAMLDEP,ocamldep,ocamldep,no)
if test "$OCAMLDEP" = no ; then
        AC_MSG_ERROR(Cannot find ocamldep.)
fi

AC_CHECK_PROG(OCAMLLEX,ocamllex,ocamllex,no)
if test "$OCAMLLEX" = no ; then
        AC_MSG_ERROR(Cannot find ocamllex.)
fi

AC_CHECK_PROG(OCAMLYACC,ocamlyacc,ocamlyacc,no)
if test "$OCAMLYACC" = no ; then
        AC_MSG_ERROR(Cannot find ocamlyacc.)
fi

# substitutions to perform
AC_SUBST(OCAMLC)
AC_SUBST(OCAMLOPT)
AC_SUBST(OCAMLDEP)
AC_SUBST(OCAMLLEX)
AC_SUBST(OCAMLYACC)
AC_SUBST(OCAMLBEST)
AC_SUBST(OCAMLVERSION)
AC_SUBST(OCAMLLIB)

# Finally create the Makefile from Makefile.in
AC_OUTPUT(Makefile)

# Makefile for Ocaml
####################

# CMO files to be compiled
CMO      = 
CMX      = $(CMO:.cmo=.cmx)

# name of the executable that should be produced
PROG = 
# how to produce it : byte or opt
# NB: OCAMLBEST is
#              - "opt" if the optimizing compiler is available
#              - "byte" otherwise
DEFAULT=byte

GENERATEDML=

LINKFLAGS=
prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
libdir=@libdir@
srcdir=@srcdir@

#
INSTALL=shtool install
INSTALL_PROGRAM=${INSTALL} -c -s -m a+rx

OCAMLC   = @OCAMLC@
OCAMLOPT = @OCAMLOPT@
OCAMLDEP = @OCAMLDEP@
OCAMLLEX = @OCAMLLEX@
OCAMLYACC= @OCAMLYACC@
OCAMLLIB = @OCAMLLIB@
OCAMLBEST= @OCAMLBEST@
OCAMLVERSION = @OCAMLVERSION@

PPRO=@PPRO@

INCLUDES = 


all:: ${DEFAULT}

byte:: ${CMO}
        ${OCAMLC} ${LINKFLAGS} -o ${PROG} ${CMO}

opt:: ${CMX}
        ${OCAMLOPT} ${LINKFLAGS} -o ${PROG} ${CMX}

install::
        ${INSTALL_PROGRAM} ${PROG} ${libdir}

# generic rules :
#################

.SUFFIXES: .mli .ml .cmi .cmo .cmx .mll .mly .mlp

.mli.cmi:
        $(OCAMLC) -c $(FLAGS) $<

.ml.cmo:
        $(OCAMLC) -c $(FLAGS) $<

.ml.o:
        $(OCAMLOPT) -c $(FLAGS) $<

.ml.cmx:
        $(OCAMLOPT) -c $(FLAGS) $<

.mll.ml:
        $(OCAMLLEX) $<

.mly.ml:
        $(OCAMLYACC) -v $<

.mly.mli:
        $(OCAMLYACC) -v $<

.mlp.ml:
        $(PPRO) $< > $@ || (rm -f $@; exit 1)

# Emacs tags
############

tags:
        find . -name "*.ml*" | sort -r | xargs \
        etags "--regex=/let[ \t]+\([^ \t]+\)/\1/" \
              "--regex=/let[ \t]+rec[ \t]+\([^ \t]+\)/\1/" \
              "--regex=/and[ \t]+\([^ \t]+\)/\1/" \
              "--regex=/type[ \t]+\([^ \t]+\)/\1/" \
              "--regex=/exception[ \t]+\([^ \t]+\)/\1/" \
              "--regex=/val[ \t]+\([^ \t]+\)/\1/" \
              "--regex=/module[ \t]+\([^ \t]+\)/\1/"

# backup, clean and depend :
############################

clean::
        rm -f *.cm[iox] *.o *~
        rm -f ${GENERATEDML}

depend:: ${GENERATEDML}
        rm -f .depend
        $(OCAMLDEP) $(INCLUDES) *.ml *.mli > .depend

${srcdir}/configure: configure.in
        cd ${srcdir} && autoconf


Makefile: Makefile.in config.status
        ./config.status

config.status: configure
        ./config.status --recheck

include .depend

Reply via email to