Revert the integration of menhir for the time being.
authorKim Nguyễn <kn@lri.fr>
Tue, 29 Apr 2014 07:45:26 +0000 (09:45 +0200)
committerKim Nguyễn <kn@lri.fr>
Tue, 29 Apr 2014 07:52:47 +0000 (09:52 +0200)
Revert "Cherry pick use of menhir features from branch feature/menhir."
Revert "Further simplify Remakefile. Remove some inefficiency in module dependency checking script."
Revert "Remove passing $NATIVE on the remake command line of every target, since variable contents are propagated."
Revert "Modify configure.in and Remakefile.in to use menhir instead of ocamlyacc."

Remakefile.in
configure.in
src/xpath/xpath_internal_parser.mly
tools/ocamldriver.sh
tools/ocamlmoduledep.sh

index 2a32aa2..1ff0b30 100644 (file)
@@ -1,11 +1,10 @@
 .OPTIONS = variable-propagation
-
 OCAMLFINDPACKAGES = "ulex,unix,expat,camlp4.macro,bigarray"
 OCAMLFINDSYNTAX = camlp4o
 OCAMLFINDPPOPTS = $(addprefix "-ppopt ", @CAMLP4FLAGS@ -I include)
 OCAMLFINDINCLUDES = $(addprefix "-I ", src)
-OCAMLFINDFLAGSNOSYNTAX = -package $(OCAMLFINDPACKAGES) $(OCAMLFINDPPOPTS) $(OCAMLFINDINCLUDES)
-OCAMLFINDFLAGS = -syntax $(OCAMLFINDSYNTAX) $(OCAMLFINDFLAGSNOSYNTAX)
+OCAMLFINDFLAGS = -syntax $(OCAMLFINDSYNTAX) -package $(OCAMLFINDPACKAGES)  \
+       $(OCAMLFINDPPOPTS) $(OCAMLFINDINCLUDES)
 OCAMLFINDLINKFLAGS = -linkpkg
 PACKAGE = @PACKAGE_TARNAME@
 SRC = src
@@ -14,15 +13,14 @@ BYTE = src/@PACKAGE_TARNAME@.byte@EXE@
 EXE = @EXE@
 
 REMAKE = @REMAKE@
+OCAMLDEP = @OCAMLDEP@
+ODEPS = tools/odeps.sh $(OCAMLDEP)
 OCAMLC = @OCAMLC@
 OCAMLOPT = @OCAMLOPT@
-OCAMLDEP = @OCAMLDEP@
-OCAMLFLAGS = @OCAMLFLAGS@
+OCAMLFLAGS = @OCAMLFLAGS@ 
 OCAMLOPTFLAGS = @OCAMLOPTFLAGS@
 OCAMLCFLAGS = @OCAMLCFLAGS@
-MENHIR = @MENHIR@
-
-.PHONY:clean real_test test_native test
+OCAMLYACC = @OCAMLYACC@
 
 all: $(BIN)
 
@@ -63,27 +61,23 @@ distclean: clean test_clean
 %.class: %.java
        javac $<
 
-%.native$(EXE):
-       $(REMAKE) OCAMLNATIVE="-native" $*.cmx $*.depx
+%.native$(EXE): %.cmx %.depx
+       if test -f $@".flags"; then
+               FLAGS=`cat $@".flags"`
+       fi
        objects=`cat $*.depx | xargs | sed 's/[.]depx/.cmx/g'`
        $(REMAKE) OCAMLNATIVE="-native" $objects #ensure all objects have been built
-       $(OCAMLOPT) -o $@  $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDLINKFLAGS) $(OCAMLFINDFLAGS) $objects $*.cmx
-
+       $(OCAMLOPT) -o $@  $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDLINKFLAGS) $(OCAMLFINDFLAGS) $FLAGS $objects $<
 
-%.byte$(EXE):
-       $(REMAKE) OCAMLNATIVE="" $*.cmo $*.depo
+%.byte$(EXE): %.cmo %.depo
        objects=`cat $*.depo | xargs | sed 's/[.]depo/.cmo/g'`
        $(REMAKE) OCAMLNATIVE="" $objects #ensure all objects have been built
-       $(OCAMLC) -o $@  $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDLINKFLAGS) $(OCAMLFINDFLAGS) $objects $*.cmo
+       $(OCAMLC) -o $@  $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDLINKFLAGS) $(OCAMLFINDFLAGS) $objects $<
 
 %.ml:
        if test -f $*.mly; then
                $(REMAKE) $*.mly
-               #Work around menhir warning
-               $(MENHIR) $*.mly 2>&1 | grep -v -- 'you are\|--infer'
-               #Work around crazy ulex chocking on identifier 'lexer', generated by menhir.
-               cat $*.ml | sed -e 's/\blexer\b/__lexer/g' > $*.tmp
-               mv $*.tmp $*.ml
+               $(OCAMLYACC) $*.mly
        elif test -f $*.mll; then
                $(REMAKE) $*.mll
                $(OCAMLLEX) $*.mll
@@ -99,21 +93,23 @@ distclean: clean test_clean
        base=$*
        target=$@
        DEPEXT=depx
-       REMAKE="$(REMAKE)"
+       NATIVE=-native
+       REMAKE="$(REMAKE) OCAMLNATIVE=$NATIVE"
        OCAMLDEP="$(OCAMLDEP) $(OCAMLFINDFLAGS)"
-       OCAMLNATIVE=$(OCAMLNATIVE)
        SRC=$(SRC)
-       COMPILE="$(OCAMLOPT) $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDFLAGS)"
+       if test -f "$base".flags; then
+               FLAGS=`cat "$base".flags`
+       fi
+       COMPILE="$(OCAMLOPT) $(OCAMLFLAGS) $(OCAMLOPTFLAGS) $(OCAMLFINDFLAGS) $FLAGS"
        . tools/ocamldriver.sh
 
-
 %.cmo %.depo:
        base=$*
        target=$@
        DEPEXT=depo
-       REMAKE="$(REMAKE)"
+       NATIVE=""
+       REMAKE="$(REMAKE) OCAMLNATIVE=$NATIVE"
        OCAMLDEP="$(OCAMLDEP) $(OCAMLFINDFLAGS)"
-       OCAMLNATIVE=$(OCAMLNATIVE)
        SRC=$(SRC)
        COMPILE="$(OCAMLC) $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDFLAGS)"
        . tools/ocamldriver.sh
@@ -121,11 +117,11 @@ distclean: clean test_clean
 %.cmi:
        base=$*
        target=$@
-       REMAKE="$(REMAKE)"
+       NATIVE=$(OCAMLNATIVE)
+       REMAKE="$(REMAKE) OCAMLNATIVE=$NATIVE"
        OCAMLDEP="$(OCAMLDEP) $(OCAMLFINDFLAGS)"
        SRC=$(SRC)
-       OCAMLNATIVE=$(OCAMLNATIVE)
-       if test -z "$OCAMLNATIVE"; then
+       if test -z "$NATIVE"; then
                DEPEXT=.depo
                COMPILE="$(OCAMLC) $(OCAMLFLAGS) $(OCAMLCFLAGS) $(OCAMLFINDFLAGS)"
        else
@@ -136,9 +132,15 @@ distclean: clean test_clean
 
 ## Tests
 
+test_byte: tools $(BYTE)
+       $(REMAKE) TEST=$(BYTE) real_test
+
+test_native: tools $(BIN)
+       $(REMAKE) TEST=$(BIN) real_test
+
+test: test_native
 
 real_test:
-       echo $(TEST)
        for i in tests/*.xml
        do
          for j in 1 2 3
@@ -147,18 +149,10 @@ real_test:
          done
        done
 
-test_byte:
-        $(REMAKE) TEST=$(BYTE) real_test
-test_native:
-       $(REMAKE) TEST=$(BIN) real_test
-
-test: test_native
-
 test_clean:
        rm -rf tests/*.summary tests/*.results/*_"$(PACKAGE)"_*.*
 
 %.summary:
-       $(REMAKE) tools $(TEST)
        target=$@
        base=$*
        test=${base#*.xml.}
index 34a9e31..5bcb4c0 100644 (file)
@@ -68,50 +68,49 @@ esac
 
 AC_SUBST(OCAMLVERSION)
 
-dnl ocamlyacc and ocamllex are not needed
 #detect ocamlyacc
-dnl OCAMLYACC=ocamlyacc
-dnl AC_ARG_WITH([ocamlyacc],
-dnl             AS_HELP_STRING([--with-ocamlyacc=PATH], [location of the ocamlyacc binary]),
-dnl         [OCAMLYACC="$withval"])
-dnl AC_MSG_CHECKING([for ocamlyacc ($OCAMLYACC)])
-dnl OCAMLYACC_VERSION=$($OCAMLYACC -version 2>/dev/null || echo foo)
-dnl case "$OCAMLYACC_VERSION" in
-dnl      *$OCAMLVERSION)
-dnl      AC_MSG_RESULT([ok])
-dnl      ;;
-dnl      foo)
-dnl      AC_MSG_RESULT([failed])
-dnl      AC_MSG_ERROR([Cannot find ocamlyacc])
-dnl      ;;
-dnl      *)
-dnl      AC_MSG_RESULT([failed])
-dnl      AC_MSG_ERROR([Bad ocamlyacc version])
-dnl      ;;
-dnl esac
-dnl AC_SUBST([OCAMLYACC])
-
-dnl #detect ocamllex
-dnl OCAMLLEX=ocamllex
-dnl AC_ARG_WITH([ocamllex],
-dnl             AS_HELP_STRING([--with-ocamllex=PATH], [location of the ocamllex binary]),
-dnl         [OCAMLLEX="$withval"])
-dnl AC_MSG_CHECKING([for ocamllex ($OCAMLLEX)])
-dnl OCAMLLEX_VERSION=$($OCAMLLEX -version 2>/dev/null || echo foo)
-dnl case "$OCAMLLEX_VERSION" in
-dnl      *$OCAMLVERSION)
-dnl      AC_MSG_RESULT([ok])
-dnl      ;;
-dnl      foo)
-dnl      AC_MSG_RESULT([failed])
-dnl      AC_MSG_ERROR([Cannot find ocamllex])
-dnl      ;;
-dnl      *)
-dnl      AC_MSG_RESULT([failed])
-dnl      AC_MSG_ERROR([Bad ocamllex version])
-dnl      ;;
-dnl esac
-dnl AC_SUBST([OCAMLLEX])
+OCAMLYACC=ocamlyacc
+AC_ARG_WITH([ocamlyacc],
+            AS_HELP_STRING([--with-ocamlyacc=PATH], [location of the ocamlyacc binary]),
+        [OCAMLYACC="$withval"])
+AC_MSG_CHECKING([for ocamlyacc ($OCAMLYACC)])
+OCAMLYACC_VERSION=$($OCAMLYACC -version 2>/dev/null || echo foo)
+case "$OCAMLYACC_VERSION" in
+     *$OCAMLVERSION)
+     AC_MSG_RESULT([ok])
+     ;;
+     foo)
+     AC_MSG_RESULT([failed])
+     AC_MSG_ERROR([Cannot find ocamlyacc])
+     ;;
+     *)
+     AC_MSG_RESULT([failed])
+     AC_MSG_ERROR([Bad ocamlyacc version])
+     ;;
+esac
+AC_SUBST([OCAMLYACC])
+
+#detect ocamllex
+OCAMLLEX=ocamllex
+AC_ARG_WITH([ocamllex],
+            AS_HELP_STRING([--with-ocamllex=PATH], [location of the ocamllex binary]),
+        [OCAMLLEX="$withval"])
+AC_MSG_CHECKING([for ocamllex ($OCAMLLEX)])
+OCAMLLEX_VERSION=$($OCAMLLEX -version 2>/dev/null || echo foo)
+case "$OCAMLLEX_VERSION" in
+     *$OCAMLVERSION)
+     AC_MSG_RESULT([ok])
+     ;;
+     foo)
+     AC_MSG_RESULT([failed])
+     AC_MSG_ERROR([Cannot find ocamllex])
+     ;;
+     *)
+     AC_MSG_RESULT([failed])
+     AC_MSG_ERROR([Bad ocamllex version])
+     ;;
+esac
+AC_SUBST([OCAMLLEX])
 
 
 #detect camlp4
@@ -158,32 +157,6 @@ else
    AC_MSG_ERROR([Cannot find ulex.])
 fi
 
-
-MENHIR=menhir
-AC_ARG_WITH([menhir],
-            AS_HELP_STRING([--with-menhir=PATH], [location of the menhir binary]),
-           [MENHIR="$withval"])
-
-AC_MSG_CHECKING([for menhir ($MENHIR)])
-
-MENHIR_VERSION=$($MENHIR --version 2>/dev/null || echo not_found)
-MENHIR_VERSION=$(echo "$MENHIR_VERSION" | cut -f 2- -d ',' | cut -f 2- -d ' ')
-case "$MENHIR_VERSION" in
-      'version 201'[[0-9]]*)
-      AC_MSG_RESULT([ok (${MENHIR_VERSION})])
-     ;;
-      not_found)
-      AC_MSG_RESULT([failed])
-      AC_MSG_ERROR([Cannot find menhir])
-     ;;
-     *)
-     AC_MSG_RESULT([failed])
-     AC_MSG_ERROR([Your version of  menhir is too old (${MENHIR_VERSION})])
-     ;;
-esac
-AC_SUBST([MENHIR])
-
-
 AC_MSG_CHECKING([for expat])
 expat_path=`$OCAMLFIND query expat 2>/dev/null`
 if test "$expat_path" ; then
index f0207ea..e5c0700 100644 (file)
@@ -50,9 +50,15 @@ path EOF          { $1 }
 ;
 
 path:
-  separated_nonempty_list(PIPE, simple_path)  { $1 }
+  path_rev { List.rev $1 }
 ;
 
+path_rev:
+  simple_path     { [ $1 ] }
+| path_rev PIPE simple_path { $3 :: $1 }
+;
+
+
 simple_path:
    absolute_path  { Absolute  (List.rev $1) }
 |  relative_path  { Relative  (List.rev $1) }
@@ -70,7 +76,6 @@ absolute_path:
   step is always a small list, of size 1-3 so @ is
   cheap
 */
-
 relative_path:
   step { $1 }
 | relative_path SLASH step { $3 @ $1 }
@@ -154,27 +159,24 @@ expr:
 | FLOAT                     { Number(`Float($1)) }
 | STRING                    { String $1 }
 | SUB expr     %prec uminus { Unop(Neg, $2) }
-| e1 = expr; op = binop; e2 = expr             { Binop(e1, op, e2) }
+| expr AND expr             { Binop($1, And, $3) }
+| expr OR expr              { Binop($1, Or, $3) }
+| expr ADD expr             { Binop($1, Add, $3) }
+| expr SUB expr             { Binop($1, Sub, $3) }
+| expr STAR expr            { Binop($1, Mult, $3) }
+| expr DIV expr             { Binop($1, Div, $3) }
+| expr MOD expr             { Binop($1, Mod, $3) }
+| expr EQ expr              { Binop($1, Eq, $3) }
+| expr NEQ expr             { Binop($1, Neq, $3) }
+| expr LT expr              { Binop($1, Lt, $3) }
+| expr LTE expr             { Binop($1, Lte, $3) }
+| expr GT expr              { Binop($1, Gt, $3) }
+| expr GTE expr             { Binop($1, Gte, $3) }
 | TAG LP arg_list RP        { Fun_call(QName.of_string $1, $3) }
 | LP expr RP                { $2 }
 | path                      { Path $1 }
 ;
 
-%inline binop:
-|  AND              { And }
-|  OR               { Or }
-|  ADD              { Add }
-|  SUB              { Sub }
-|  STAR             { Mult }
-|  DIV              { Div }
-|  MOD              { Mod }
-|  EQ               { Eq }
-|  NEQ              { Neq }
-|  LT               { Lt }
-|  LTE              { Lte }
-|  GT               { Gt }
-|  GTE              { Gte }
-;
 arg_list:
                             { [] }
 | arg_list1                 { List.rev $1 }
index d2a968e..6d8e39b 100644 (file)
@@ -14,7 +14,7 @@ elif test -f ${base}.pack -a -d ${base}; then
 fi
 if test "$PACKDIR"; then
     PACKNAME=`echo $PACKDIR | cut -b1 | tr a-z A-Z`${PACKDIR#?}
-    if test "$OCAMLNATIVE"; then
+    if test "$NATIVE"; then
         FORPACK="-for-pack $PACKNAME"
     fi
 fi
@@ -25,7 +25,7 @@ if test "$EXT" = i; then
     fi
 
     modules=`$OCAMLDEP -modules ${base}.mli | cut -f 2- -d ':'`
-    objects=`tools/ocamlmoduledep.sh -inter $OCAMLNATIVE $PACKINCLUDE -I $SRC $modules`
+    objects=`tools/ocamlmoduledep.sh -inter $NATIVE $PACKINCLUDE -I $SRC $modules`
     $REMAKE $objects
     $COMPILE  -o ${target} -c $PACKINCLUDE ${base}.mli
     exit 0
@@ -33,14 +33,14 @@ fi
 
 if test "$DOPACK"; then
     modules=`cat ${base}.pack`
-    objects=`echo $modules | xargs tools/ocamlmoduledep.sh $OCAMLNATIVE $PACKINCLUDE -I $SRC `
+    objects=`echo $modules | xargs tools/ocamlmoduledep.sh $NATIVE $PACKINCLUDE -I $SRC `
 else
     $REMAKE ${base}.ml
     modules=`$OCAMLDEP -modules ${base}.ml | cut -f 2- -d ':'`
     if test "$EXT" = "o"; then
        INTER=-inter
     fi
-    objects=`tools/ocamlmoduledep.sh $INTER $OCAMLNATIVE $PACKINCLUDE -I $SRC $modules`
+    objects=`tools/ocamlmoduledep.sh $INTER $NATIVE $PACKINCLUDE -I $SRC $modules`
 fi
 
 $REMAKE $objects
index 2833671..8575312 100755 (executable)
@@ -11,11 +11,10 @@ INCLUDES=""
 MODULES=""
 NATIVE=0
 INTER=0
-OCAMLWHERE=$(ocamlc -where)
 while true; do
     case $1 in
         -I)
-            dir=`echo "$2" | sed "s:^+:${OCAMLWHERE}/:"`
+            dir=`echo "$2" | sed "s:^+:$(ocamlc -where)/:"`
             INCLUDES="$INCLUDES
 $dir"
             shift
@@ -44,23 +43,22 @@ else
     ext=cmo
 fi
 
-
 for MODULE in $MODULES; do
-    module="$(echo ${MODULE} | sed -e 's:\(.*\):\l\1:')"
+    module="$(echo $MODULE | cut -b1 | tr A-Z a-z)$(echo $MODULE | cut -b2-)"
     echo "$INCLUDES" | while read include; do
        if test -z "$include"; then continue; fi
-        base="${include}/${module}"
+        base="$include/$module"
         if test  \( "$INTER" = "1" \) -a \( -f "$base".mli \) ; then
            ## if we want to depend only on cmi of a module
-            /bin/echo -n  "${base}"."cmi "
+                /bin/echo -n  "$base"."cmi "
         elif test -f "$base".ml -o -f "$base".mly -o -f "$base".mll -o -f "$base".pack -o -f "$base".ml.str; then
            ## else we depend on the implementation 
-            /bin/echo -n  "${base}"."${ext} "
+            /bin/echo -n  "$base"."$ext "
             break
-        elif test -f "${base}".mli; then
+        elif test -f "$base".mli; then
            ## and fall back on depending on the cmi if the cmx is not available
            ## (which prevents cross-module inlining in the case of cmx)
-            /bin/echo -n  "${base}"."cmi "
+            /bin/echo -n  "$base"."cmi "
             break
         fi
     done