Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package opam-file-format for openSUSE:Factory checked in at 2025-07-16 15:52:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/opam-file-format (Old) and /work/SRC/openSUSE:Factory/.opam-file-format.new.7373 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "opam-file-format" Wed Jul 16 15:52:55 2025 rev:8 rq:1293542 version:2.2.0 Changes: -------- --- /work/SRC/openSUSE:Factory/opam-file-format/opam-file-format.changes 2023-05-23 14:54:07.326333573 +0200 +++ /work/SRC/openSUSE:Factory/.opam-file-format.new.7373/opam-file-format.changes 2025-07-16 15:55:54.015095734 +0200 @@ -1,0 +2,6 @@ +Mon Jul 7 07:07:07 UTC 2025 - oher...@suse.de + +- Update to version 2.2.0 + see included CHANGES file for details + +------------------------------------------------------------------- Old: ---- opam-file-format-2.1.6.tar.xz New: ---- opam-file-format-2.2.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ opam-file-format.spec ++++++ --- /var/tmp/diff_new_pack.eFYenL/_old 2025-07-16 15:55:54.563118614 +0200 +++ /var/tmp/diff_new_pack.eFYenL/_new 2025-07-16 15:55:54.563118614 +0200 @@ -1,7 +1,7 @@ # # spec file for package opam-file-format # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2025 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -29,7 +29,7 @@ %define pkg opam-file-format Name: %pkg%nsuffix -Version: 2.1.6 +Version: 2.2.0 Release: 0 %{?ocaml_preserve_bytecode} Summary: Parser and printer for the opam file syntax @@ -38,12 +38,14 @@ URL: https://opam.ocaml.org/ Source0: %pkg-%version.tar.xz BuildRequires: ocaml -BuildRequires: ocaml-dune -BuildRequires: ocaml-rpm-macros >= 20230101 +BuildRequires: ocaml-dune >= 3.13 +BuildRequires: ocaml-rpm-macros >= 20250517 +BuildRequires: ocamlfind(menhir) %if "%build_flavor" == "testsuite" BuildRequires: ocamlfind(alcotest) -BuildRequires: ocamlfind(opam-file-format) +BuildRequires: ocamlfind(fmt) +BuildRequires: ocamlfind(opam-file-format) = %version %endif %description ++++++ _service ++++++ --- /var/tmp/diff_new_pack.eFYenL/_old 2025-07-16 15:55:54.615120785 +0200 +++ /var/tmp/diff_new_pack.eFYenL/_new 2025-07-16 15:55:54.627121286 +0200 @@ -1,6 +1,6 @@ <services> - <service mode="disabled" name="tar_scm"> - <param name="revision">303ab85afb67c7c22ea548b87241b08616b9f6f2</param> + <service mode="manual" name="tar_scm"> + <param name="revision">59d9a6b585ac3fd141004f155a459e78f39993ac</param> <param name="scm">git</param> <param name="submodules">disable</param> <param name="url">https://github.com/ocaml/opam-file-format.git</param> @@ -8,10 +8,10 @@ <param name="versionrewrite-pattern">[v]?([^+]+)(.*)</param> <param name="versionrewrite-replacement">\1</param> </service> - <service mode="disabled" name="recompress"> + <service mode="manual" name="recompress"> <param name="compression">xz</param> <param name="file">*.tar</param> </service> - <service mode="disabled" name="set_version"/> + <service mode="manual" name="set_version"/> </services> ++++++ opam-file-format-2.1.6.tar.xz -> opam-file-format-2.2.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/.gitignore new/opam-file-format-2.2.0/.gitignore --- old/opam-file-format-2.1.6/.gitignore 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/.gitignore 2025-07-03 16:27:27.000000000 +0200 @@ -1,23 +1,5 @@ *~ .#* \#*# -*.cmo -*.cmx -*.cmi -*.cmt -*.cmti -*.cma -*.cmxa -*.cmxs -*.a -*.lib -*.o _build *.install -.merlin -*.obj -src/.depend -src/opamBaseParser.ml -src/opamBaseParser.mli -src/opamLexer.ml -src/META diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/CHANGES new/opam-file-format-2.2.0/CHANGES --- old/opam-file-format-2.1.6/CHANGES 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/CHANGES 2025-07-03 16:27:27.000000000 +0200 @@ -1,3 +1,12 @@ +2.2.0 [03 July 2025] +-------------------- +* No change since 2.2.0~alpha1 + +2.2.0~alpha1 [06 December 2024] +------------------------------- +* Remove the optional GNU Make build system in favour of Dune [#51 @kit-ty-kate] +* Make the parser domain-safe by switching from ocamlyacc to menhir [#60 @kit-ty-kate] + 2.1.6 [20 March 2023] ------------------------ * Remove deprecated usage of `Printf.ksprintf`, ocaml 5 compatibility diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/Makefile new/opam-file-format-2.2.0/Makefile --- old/opam-file-format-2.1.6/Makefile 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/Makefile 1970-01-01 01:00:00.000000000 +0100 @@ -1,39 +0,0 @@ -TARGETS = opam-file-format.cma opam-file-format.cmxa opam-file-format.cmxs - -all: $(TARGETS) - $(MAKE) -C src META - -byte: $(filter %.cma,$(TARGETS)) - $(MAKE) -C src META - -native: $(filter %.cmxa,$(TARGETS)) - $(MAKE) -C src META - -.PHONY: dune clean -dune: - dune build --profile=dev @all - -%: - $(MAKE) -C src $@ - -tests: opam-file-format.cmxa - $(MAKE) -C tests run - -PREFIX ?= /usr/local -LIBDIR ?= $(PREFIX)/lib - -install: - mkdir -p $(DESTDIR)$(LIBDIR)/opam-file-format - install -m 0644 \ - $(wildcard $(addprefix src/*.,cmi cmo cmx cmt cmti lib a cma cmxa cmxs)) \ - src/META \ - $(DESTDIR)$(LIBDIR)/opam-file-format/ - -uninstall: - rm -f $(DESTDIR)$(LIBDIR)/opam-file-format/* - rmdir $(DESTDIR)$(LIBDIR)/opam-file-format - -clean:: - rm -rf _build - $(MAKE) -C src $@ - $(MAKE) -C tests $@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/README.md new/opam-file-format-2.2.0/README.md --- old/opam-file-format-2.1.6/README.md 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/README.md 2025-07-03 16:27:27.000000000 +0200 @@ -1,8 +1,7 @@ # opam-file-format - Parser and printer for the opam file syntax This library provides the parser and printer for the opam file syntax as a -library with no dependencies. The package can be built either with GNU make -or any version of [Dune](https://dune.build). +library with no dependencies but [Dune](https://dune.build) >= 3.13. Opam was created and is maintained by [OCamlPro](http://www.ocamlpro.com). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/appveyor.cmd new/opam-file-format-2.2.0/appveyor.cmd --- old/opam-file-format-2.1.6/appveyor.cmd 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/appveyor.cmd 1970-01-01 01:00:00.000000000 +0100 @@ -1,94 +0,0 @@ -@rem *********************************************************************** -@rem * * -@rem * opam * -@rem * * -@rem * David Allsopp, OCaml Labs, Cambridge. * -@rem * * -@rem * Copyright 2018 MetaStack Solutions Ltd. * -@rem * * -@rem * All rights reserved. This file is distributed under the terms of * -@rem * the GNU Lesser General Public License version 2.1, with the * -@rem * special exception on linking described in the file LICENSE. * -@rem * * -@rem *********************************************************************** - -@rem BE CAREFUL ALTERING THIS FILE TO ENSURE THAT ERRORS PROPAGATE -@rem IF A COMMAND SHOULD FAIL IT PROBABLY NEEDS TO END WITH -@rem || exit /b 1 -@rem BASICALLY, DO THE TESTING IN BASH... - -@rem Do not call setlocal! -@echo off - -goto %1 - -goto :EOF - -:CheckPackage -"%CYG_ROOT%\bin\bash.exe" -lc "cygcheck -dc %1" | findstr %1 > nul -if %ERRORLEVEL% equ 1 ( - echo Cygwin package %1 will be installed - set CYGWIN_INSTALL_PACKAGES=%CYGWIN_INSTALL_PACKAGES%,%1 -) -goto :EOF - -:UpgradeCygwin -if "%CYGWIN_INSTALL_PACKAGES%" neq "" "%CYG_ROOT%\setup-%CYG_ARCH%.exe" --quiet-mode --no-shortcuts --no-startmenu --no-desktop --only-site --root "%CYG_ROOT%" --site "%CYG_MIRROR%" --local-package-dir "%CYG_CACHE%" --packages %CYGWIN_INSTALL_PACKAGES:~1% > nul -for %%P in (%CYGWIN_COMMANDS%) do "%CYG_ROOT%\bin\bash.exe" -lc "%%P --help" > nul || set CYGWIN_UPGRADE_REQUIRED=1 -"%CYG_ROOT%\bin\bash.exe" -lc "cygcheck -dc %CYGWIN_PACKAGES%" -if %CYGWIN_UPGRADE_REQUIRED% equ 1 ( - echo Cygwin package upgrade required - please go and drink coffee - "%CYG_ROOT%\setup-%CYG_ARCH%.exe" --quiet-mode --no-shortcuts --no-startmenu --no-desktop --only-site --root "%CYG_ROOT%" --site "%CYG_MIRROR%" --local-package-dir "%CYG_CACHE%" --upgrade-also > nul - "%CYG_ROOT%\bin\bash.exe" -lc "cygcheck -dc %CYGWIN_PACKAGES%" -) -goto :EOF - -:install -set CYG_ROOT=C:\%CYG_ROOT% - -cd "%APPVEYOR_BUILD_FOLDER%" - -rem CYGWIN_PACKAGES is the list of required Cygwin packages (cygwin is included -rem in the list just so that the Cygwin version is always displayed on the log). -rem CYGWIN_COMMANDS is a corresponding command to run with --version to test -rem whether the package works. This is used to verify whether the installation -rem needs upgrading. -set CYGWIN_PACKAGES=cygwin make patch diffutils tar unzip -set CYGWIN_COMMANDS=cygcheck make patch diff tar unzip - -if "%OCAML_PORT%" equ "mingw" ( - set CYGWIN_PACKAGES=%CYGWIN_PACKAGES% mingw64-i686-gcc-core - set CYGWIN_COMMANDS=%CYGWIN_COMMANDS% i686-w64-mingw32-core -) -if "%OCAML_PORT%" equ "mingw64" ( - set CYGWIN_PACKAGES=%CYGWIN_PACKAGES% mingw64-x86_64-gcc-core - set CYGWIN_COMMANDS=%CYGWIN_COMMANDS% x86_64-w64-mingw32-core -) -if "%OCAML_PORT:~0,6%" equ "cygwin" ( - set CYGWIN_PACKAGES=%CYGWIN_PACKAGES% flexdll gcc-core - set CYGWIN_COMMANDS=%CYGWIN_COMMANDS% flexlink gcc -) - -set CYGWIN_INSTALL_PACKAGES= -set CYGWIN_UPGRADE_REQUIRED=0 - -for %%P in (%CYGWIN_PACKAGES%) do call :CheckPackage %%P -call :UpgradeCygwin - -if "%OCAML_PORT%" equ "msvc64" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" -if "%OCAML_PORT%" equ "msvc" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat" - -"%CYG_ROOT%\bin\bash.exe" -lc "$APPVEYOR_BUILD_FOLDER/appveyor.sh install" || exit /b 1 - -set PATH=%OCAML_ROOT%\%OCAML_VERSION%\%OCAML_PORT%\bin;%PATH% - -goto :EOF - -:build -"%CYG_ROOT%\bin\bash.exe" -lc "$APPVEYOR_BUILD_FOLDER/appveyor.sh build" || exit /b 1 - -goto :EOF - -:test - -goto :EOF diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/appveyor.sh new/opam-file-format-2.2.0/appveyor.sh --- old/opam-file-format-2.1.6/appveyor.sh 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/appveyor.sh 1970-01-01 01:00:00.000000000 +0100 @@ -1,167 +0,0 @@ -#!/bin/bash - -TERM=st - -# Increment whenever the OCaml version or a package is updated to invalidate the caches -SERIAL=1 - -ROOT_CYG=$(echo $OCAML_ROOT| cygpath -f -) -APPVEYOR_BUILD_FOLDER=$(echo $APPVEYOR_BUILD_FOLDER| cygpath -f -) - -ERRORS_ALLOWED=0 -function quietly_log { - if ! script --quiet --return --append --command "$1" $LOG_FILE > /dev/null 2>&1 ; then - sed -e 's/\d027\[K//g' \ - -e 's/\d027\[m/\d027[0m/g' \ - -e 's/\d027\[01\([m;]\)/\d027[1\1/g' $LOG_FILE - if ((ERRORS_ALLOWED)) ; then - return 1 - else - exit 1 - fi - fi -} - -function msvs_promote_path { - if [[ ${1%64} = "msvc" ]] ; then - eval $($ROOT_CYG/msvs-promote-path) - fi -} - -case "$1" in - install) - # @@DRA TODO This should be converted OCAML_ROOT to a regexp, not having C:\\\\OCaml hard coded! - if ! cat $APPVEYOR_BUILD_FOLDER/appveyor.yml | tr -d '\015' | sed -e '1,/^cache:/d' -e '/^$/,$d' | grep -q "^ \+- \+C:\\\\OCaml$" ; then - echo "$(tput setf 4)ERROR$(tput sgr0) C:\\OCaml doesn't appear to be cached in appveyor.yml" - exit 1 - fi - - if [[ ! -e $ROOT_CYG/$OCAML_VERSION/$OCAML_PORT/bin/ocamlopt.exe || ! -e $ROOT_CYG/$OCAML_VERSION/version || $(cat $ROOT_CYG/$OCAML_VERSION/version) != "$OCAML_VERSION-$SERIAL" ]] ; then - if [[ -e $ROOT_CYG/$OCAML_VERSION/version && $(cat $ROOT_CYG/$OCAML_VERSION/version) != "$OCAML_VERSION-$SERIAL" ]] ; then - echo "Build cache for $OCAML_VERSION has serial $(cat $ROOT_CYG/$OCAML_VERSION/version); should be $OCAML_VERSION-$SERIAL -- clearing" - rm -rf $ROOT_CYG/$OCAML_VERSION - elif [[ ! -e $ROOT_CYG/$OCAML_VERSION/version ]] ; then - rm -rf $ROOT_CYG/$OCAML_VERSION - fi - - PREFIX=$ROOT_CYG/$OCAML_VERSION/$OCAML_PORT - ROOT=$(echo $OCAML_ROOT| cygpath -m -f -)/$OCAML_VERSION/$OCAML_PORT - OCAML_BRANCH=${OCAML_VERSION%.*} - OCAML_BRANCH=${OCAML_BRANCH/.} - - if [[ ! -d $APPVEYOR_BUILD_FOLDER/../src ]] ; then - mkdir -p $APPVEYOR_BUILD_FOLDER/../src - cd $APPVEYOR_BUILD_FOLDER/../src - git clone https://github.com/ocaml/ocaml.git - cd ocaml - mkdir -p $PREFIX - cp tools/msvs-promote-path $ROOT_CYG/ - cd .. - FLEXDLL_VER=0.37 - appveyor DownloadFile "https://github.com/alainfrisch/flexdll/releases/download/$FLEXDLL_VER/flexdll-bin-$FLEXDLL_VER.zip" -FileName flexdll-bin-$FLEXDLL_VER.zip - [[ -e $PREFIX/../version ]] || echo $OCAML_VERSION-$SERIAL> $PREFIX/../version - fi - - cd $APPVEYOR_BUILD_FOLDER/../src/ocaml - git checkout $OCAML_VERSION - git worktree add ../$OCAML_VERSION/$OCAML_PORT/ocaml -b build-$OCAML_VERSION-$OCAML_PORT - if [[ $OCAML_BRANCH -ge 403 ]] ; then - pushd ../$OCAML_VERSION/$OCAML_PORT/ocaml > /dev/null - git submodule update --init - popd > /dev/null - fi - cd ../$OCAML_VERSION/$OCAML_PORT/ocaml - if [[ ${OCAML_PORT%64} = "cygwin" ]] ; then - if [[ $OCAML_BRANCH -gt 406 ]] ; then - NO_ALT_RUNTIMES="-no-instrumented-runtime -no-debug-runtime" - else - NO_ALT_RUNTIMES= - fi - PRE_WORLD= - POST_WORLD= - MAKEFILE= - ./configure -prefix $PREFIX -no-ocamldoc -no-debugger $NO_ALT_RUNTIMES - else - if [[ $OCAML_BRANCH -ge 406 ]] ; then - cp config/s-nt.h byterun/caml/s.h - cp config/m-nt.h byterun/caml/m.h - else - cp config/s-nt.h config/s.h - cp config/m-nt.h config/m.h - fi - if [[ $OCAML_BRANCH -ge 405 ]] ; then - POST_WORLD=flexlink.opt - MAKEFILE= - else - POST_WORLD= - MAKEFILE=-f Makefile.nt - fi - if [[ $OCAML_BRANCH -lt 403 ]] ; then - mkdir -p $PREFIX/bin - pushd $PREFIX/bin > /dev/null - case $OCAML_PORT in - msvc) - MANIFEST=default.manifest;; - msvc64) - MANIFEST=default_amd64.manifest;; - *) - MANIFEST=;; - esac - unzip $APPVEYOR_BUILD_FOLDER/../src/flexdll-bin-$FLEXDLL_VER.zip flexdll_*$OCAML_PORT.* flexdll.h flexlink.exe $MANIFEST - popd > /dev/null - PRE_WORLD= - else - PRE_WORLD=flexdll - fi - sed -e "s|PREFIX=[^\r]*|PREFIX=$ROOT|" config/Makefile.$OCAML_PORT > config/Makefile - msvs_promote_path $OCAML_PORT - fi - - LOG_FILE=OCaml-$OCAML_VERSION-$OCAML_PORT.log - echo "Building OCaml $OCAML_VERSION for $OCAML_PORT" | tee $LOG_FILE - echo "Please see $LOG_FILE for further information" - LOG_FILE="$APPVEYOR_BUILD_FOLDER/$LOG_FILE" - quietly_log "make $MAKEFILE $PRE_WORLD world.opt $POST_WORLD install" - # Remove unnecessary executables to keep the build cache size down - # These are removed here to ensure findlib doesn't configure itself - # to use .opt commands - if [[ $OCAML_BRANCH -ge 404 ]] ; then - if [[ ${OCAML_PORT%64} != "cygwin" ]] ; then - rm $PREFIX/bin/*.opt.exe - fi - rm $PREFIX/bin/*.byte.exe - else - for i in $PREFIX/bin/*.opt.exe ; do - rm ${i%.opt.exe}.exe - mv $i ${i%.opt.exe}.exe - done - fi - # Remove unnecessary commands to keep the build cache size down - rm -f $PREFIX/bin/{ocamlcp,ocamldebug,ocamldoc,ocamlmktop,ocamlobjinfo,ocamloptp,ocamlprof}.exe \ - $PREFIX/lib/{expunge,extract_crc,objinfo_helper}.exe - # Remove unnecessary files - if [[ $OCAML_BRANCH -lt 405 && $OCAML_BRANCH -gt 402 ]] ; then - rm $PREFIX/*.txt - fi - find $PREFIX -name \*.cmt\* | xargs rm - find $PREFIX -name \*.ml\* | xargs rm - rm -f $PREFIX/lib/compiler-libs/*.cmx* $PREFIX/lib/compiler-libs/*.{lib,a} $PREFIX/lib/compiler-libs/ocamloptcomp.cma - echo "Complete" - appveyor PushArtifact $(echo $LOG_FILE| cygpath -m -f -) - fi - ;; - build) - if [[ -z $2 ]] ; then - set -o pipefail - SCRIPT=$(echo "$0"| cygpath -f -) - script -qec "\"$SCRIPT\" $1 script" | sed -e 's/\d027\[K//g' \ - -e 's/\d027\[m/\d027[0m/g' \ - -e 's/\d027\[01\([m;]\)/\d027[1\1/g' - exit $? - fi - - msvs_promote_path $OCAML_PORT - - make -C $APPVEYOR_BUILD_FOLDER all - ;; -esac diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/appveyor.yml new/opam-file-format-2.2.0/appveyor.yml --- old/opam-file-format-2.1.6/appveyor.yml 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/appveyor.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,42 +0,0 @@ -platform: - - x64 - -image: Visual Studio 2017 - -clone_depth: 1 - -environment: - global: - CYG_ROOT: cygwin64 - CYG_ARCH: x86_64 - OCAML_ROOT: C:\OCaml - OCAML_VERSION: 4.06.1 - CYG_CACHE: C:\cygwin\var\cache\setup - CYG_MIRROR: http://mirrors.kernel.org/sourceware/cygwin/ - matrix: - - CYG_ROOT: cygwin - CYG_ARCH: x86 - OCAML_PORT: cygwin - - CYG_ROOT: cygwin64 - OCAML_PORT: cygwin64 - - OCAML_PORT: msvc - - OCAML_PORT: msvc64 - - OCAML_PORT: mingw - - OCAML_PORT: mingw64 - -cache: - - C:\OCaml - -install: - - call "%APPVEYOR_BUILD_FOLDER%\appveyor.cmd" install - -build_script: - - call "%APPVEYOR_BUILD_FOLDER%\appveyor.cmd" build - -test_script: - - call "%APPVEYOR_BUILD_FOLDER%\appveyor.cmd" test - -# Uncomment this to enable Remote Desktop on the build worker at the end of the -# build. The worker is available for the remainder of the allocated hour. -#on_finish: -# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/dune-project new/opam-file-format-2.2.0/dune-project --- old/opam-file-format-2.1.6/dune-project 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/dune-project 2025-07-03 16:27:27.000000000 +0200 @@ -1 +1,2 @@ -(lang dune 1.3) +(lang dune 3.13) +(using menhir 2.0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/opam-file-format.opam new/opam-file-format-2.2.0/opam-file-format.opam --- old/opam-file-format-2.1.6/opam-file-format.opam 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/opam-file-format.opam 2025-07-03 16:27:27.000000000 +0200 @@ -1,5 +1,5 @@ opam-version: "2.0" -version: "2.1.6" +version: "2.2.0" synopsis: "Parser and printer for the opam file syntax" maintainer: "Louis Gesbert <louis.gesb...@ocamlpro.com>" authors: "Louis Gesbert <louis.gesb...@ocamlpro.com>" @@ -7,17 +7,12 @@ bug-reports: "https://github.com/ocaml/opam-file-format/issues" license: "LGPL-2.1-only WITH OCaml-LGPL-linking-exception" dev-repo: "git+https://github.com/ocaml/opam-file-format" -build: [ - [make "byte" {!ocaml:native} "all" {ocaml:native}] {!dune:installed} - ["dune" "build" "-p" name "-j" jobs "@install" "@doc" {with-doc}] {dune:installed} - ["dune" "runtest" "-p" name "-j" jobs] {with-test & dune:installed} -] -install: [make "install" "PREFIX=%{prefix}%"] {!dune:installed} +build: ["dune" "build" "-p" name "-j" jobs] +run-test: ["dune" "runtest" "-p" name "-j" jobs] depends: [ - "ocaml" {>= "3.09.0"} - "alcotest" {with-test} -] -depopts: [ - "dune" + "ocaml" {>= "4.02"} + "dune" {>= "3.13"} + "menhir" {>= "20211230"} + "alcotest" {with-test & >= "0.4.8"} + "fmt" {with-test} ] -conflicts: "dune" {< "1.3.0"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/src/META.in new/opam-file-format-2.2.0/src/META.in --- old/opam-file-format-2.1.6/src/META.in 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/src/META.in 1970-01-01 01:00:00.000000000 +0100 @@ -1,4 +0,0 @@ -version = VERSION -description = "Parser and printer for the opam file syntax" -archive(byte) = "opam-file-format.cma" -archive(native) = "opam-file-format.cmxa" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/src/Makefile new/opam-file-format-2.2.0/src/Makefile --- old/opam-file-format-2.1.6/src/Makefile 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/src/Makefile 1970-01-01 01:00:00.000000000 +0100 @@ -1,67 +0,0 @@ -all: opam-file-format.cmxa opam-file-format.cma - -%.ml: %.mll - ocamllex $< - -EMPTY= -SPACE=$(EMPTY) $(EMPTY) -OCAML_VERSION:=$(firstword $(subst ~, ,$(subst +, ,$(shell ocamlc -version)))) -ifeq ($(OCAML_VERSION),) -OCAML_VERSION:=0 -else -OCAML_VERSION:=$(subst ., ,$(OCAML_VERSION)) -OCAML_VERSION:=$(subst $(SPACE),,$(firstword $(OCAML_VERSION))$(foreach i,$(wordlist 2,$(words $(OCAML_VERSION)),$(OCAML_VERSION)),$(if $(filter 0 1 2 3 4 5 6 7 8 9,$(i)),0,)$(i))) -endif - -ifeq ($(shell test $(OCAML_VERSION) -ge 40202 || echo no-attributes),) -PP= -else -PP=-pp 'sed -e s/\\[@@\\?ocaml[^]]*\\]//' -endif - -show: - echo $(OCAML_VERSION) - -opamParserTypes.cmi: opamParserTypes.cmo - -%.ml %.mli: %.mly - ocamlyacc $< - -%.cmi: %.mli - ocamlc -c $(PP) $< - -%.cmo: %.ml - ocamlc -c $(PP) $< - -%.cmx: %.ml - ocamlopt -c $(PP) $< - -MODULES = opamParserTypes opamBaseParser opamLexer opamParser opamPrinter - -GENERATED = $(patsubst %.mly,%.ml,$(wildcard *.mly)) \ - $(patsubst %.mly,%.mli,$(wildcard *.mly)) \ - $(patsubst %.mll,%.ml,$(wildcard *.mll)) \ - META - -opam-file-format.cma: $(addsuffix .cmo,$(MODULES)) - ocamlc -a $^ -o $@ - -opam-file-format.cmxa: $(addsuffix .cmx,$(MODULES)) - ocamlopt -a $^ -o $@ - -opam-file-format.cmxs: $(addsuffix .cmx,$(MODULES)) - ocamlopt -shared $^ -o $@ - -META: META.in ../opam-file-format.opam $(wildcard *.cm*) - sed -e 's/VERSION/$(shell sed -ne "s/^version: //p" ../opam-file-format.opam)/' \ - $(if $(wildcard *.cmx*),,-e '/archive(native)/d') \ - $(if $(wildcard *.cma),,-e '/archive(byte)/d') $< > $@ - -.PHONY: clean -clean: - rm -f *.cm* *.o *.a $(GENERATED) .depend .merlin - -.depend: *.ml *.mli $(GENERATED) - ocamldep $(PP) *.mli *.ml > .depend - --include .depend diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/src/compat/domain.ml new/opam-file-format-2.2.0/src/compat/domain.ml --- old/opam-file-format-2.1.6/src/compat/domain.ml 1970-01-01 01:00:00.000000000 +0100 +++ new/opam-file-format-2.2.0/src/compat/domain.ml 2025-07-03 16:27:27.000000000 +0200 @@ -0,0 +1,4 @@ +module DLS = struct + let new_key f = f () + let get x = x +end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/src/compat/dune new/opam-file-format-2.2.0/src/compat/dune --- old/opam-file-format-2.1.6/src/compat/dune 1970-01-01 01:00:00.000000000 +0100 +++ new/opam-file-format-2.2.0/src/compat/dune 2025-07-03 16:27:27.000000000 +0200 @@ -0,0 +1,6 @@ +(rule + (enabled_if (< %{ocaml_version} "5.0")) + (action (with-stdout-to compat.sexp (echo "(\"domain\")")))) +(rule + (enabled_if (>= %{ocaml_version} "5.0")) + (action (with-stdout-to compat.sexp (echo "()")))) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/src/dune new/opam-file-format-2.2.0/src/dune --- old/opam-file-format-2.1.6/src/dune 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/src/dune 2025-07-03 16:27:27.000000000 +0200 @@ -3,18 +3,21 @@ (public_name opam-file-format) (synopsis "Parser and printer for the opam file syntax") (wrapped false) - (modules :standard \ flags) + (private_modules (:include compat/compat.sexp)) (flags :standard (:include flags.sexp))) (rule - (with-stdout-to flags.ml - (echo "print_string (if String.sub Sys.ocaml_version 0 5 = \"4.02.\" then \"(-w -50)\" else \"()\")"))) + (enabled_if (< %{ocaml_version} "5.0")) + (action (copy compat/domain.ml domain.ml))) (rule - (with-stdout-to flags.sexp - (run ocaml %{dep:flags.ml}))) + (enabled_if (< %{ocaml_version} "4.03")) + (action (with-stdout-to flags.sexp (echo "(-w -50)")))) +(rule + (enabled_if (>= %{ocaml_version} "4.03")) + (action (with-stdout-to flags.sexp (echo "()")))) -(ocamlyacc opamBaseParser) +(menhir (modules opamBaseParser) (infer false)) (ocamllex opamLexer) (env (dev diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/src/opamBaseParser.mly new/opam-file-format-2.2.0/src/opamBaseParser.mly --- old/opam-file-format-2.1.6/src/opamBaseParser.mly 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/src/opamBaseParser.mly 2025-07-03 16:27:27.000000000 +0200 @@ -15,20 +15,15 @@ (** Opam config file generic type parser *) -let pos_of_lexing_pos spos epos = +let get_pos spos epos = Lexing.({ filename = spos.pos_fname; start = spos.pos_lnum, spos.pos_cnum - spos.pos_bol; stop = epos.pos_lnum, epos.pos_cnum - epos.pos_bol; }) -let get_pos_full ?(s=1) n = - pos_of_lexing_pos (Parsing.rhs_start_pos s) (Parsing.rhs_end_pos n) - -let get_pos n = get_pos_full ~s:n n - (* This must match up with the package's version; checked by the build system *) -let version = (2, 1) +let version = (2, 2) %} @@ -46,28 +41,27 @@ %token <OpamParserTypes.FullPos.pfxop_kind> PFXOP %token <OpamParserTypes.FullPos.env_update_op_kind> ENVOP -%left COLON %left ATOM %left OR %left AND -%nonassoc ENVOP %nonassoc PFXOP -%left LBRACE RBRACE +%left LBRACE %nonassoc RELOP -%nonassoc URELOP %start main value %type <string -> OpamParserTypes.FullPos.opamfile> main %type <OpamParserTypes.FullPos.value> value +%type <OpamParserTypes.FullPos.value> valu_ %type <OpamParserTypes.FullPos.value list> values %type <OpamParserTypes.FullPos.opamfile_item> item +%type <OpamParserTypes.FullPos.value> atom +%type <OpamParserTypes.FullPos.opamfile_item list> items %% -main: -| items EOF { fun file_name -> - { file_contents = $1; file_name } } -; +/* Exported values (must have an End Of File token) */ +main: items EOF { fun file_name -> { file_contents = $1; file_name } }; +value: valu_ EOF { $1 }; items: | item items { $1 :: $2 } @@ -75,58 +69,61 @@ ; item: -| IDENT COLON value { - { pos = get_pos_full 3; +| IDENT COLON valu_ { + { pos = get_pos $startpos($1) $endpos($3); pelem = - Variable ({ pos = get_pos 1; pelem = $1 }, $3); + Variable ({ pos = get_pos $startpos($1) $endpos($1); pelem = $1 }, $3); } } | IDENT LBRACE items RBRACE { - { pos = get_pos_full 4; + { pos = get_pos $startpos($1) $endpos($4); pelem = - Section ({section_kind = { pos = get_pos 1; pelem = $1 }; + Section ({section_kind = { pos = get_pos $startpos($1) $endpos($1); pelem = $1 }; section_name = None; section_items = - { pos = get_pos_full ~s:2 4; pelem = $3 }; + { pos = get_pos $startpos($2) $endpos($4); pelem = $3 }; }) } } | IDENT STRING LBRACE items RBRACE { - { pos = get_pos_full 5; + { pos = get_pos $startpos($1) $endpos($5); pelem = - Section ({section_kind = { pos = get_pos 1; pelem = $1 }; - section_name = Some { pos = get_pos 2; pelem = $2 }; + Section ({section_kind = { pos = get_pos $startpos($1) $endpos($1); pelem = $1 }; + section_name = Some { pos = get_pos $startpos($2) $endpos($2); pelem = $2 }; section_items = - { pos = get_pos_full ~s:3 5; pelem = $4 }; + { pos = get_pos $startpos($3) $endpos($5); pelem = $4 }; }) } } ; -value: +/* Previously called "value" and directly exported. + However menhir handles end-of-stream differently compared to ocamlyacc. + Thus "value" (exported, handling end-of-stream) and "valu_" (internal, does not handle end-of-stream) had to be created */ +valu_: | atom %prec ATOM { $1 } -| LPAR values RPAR {{ pos = get_pos_full 3 ; pelem = Group { pos = get_pos_full ~s:1 3; pelem = $2 } }} -| LBRACKET values RBRACKET {{ pos = get_pos_full 3 ; pelem = List { pos = get_pos_full ~s:1 3; pelem = $2 } }} -| value LBRACE values RBRACE {{ pos = get_pos_full 4 ; - pelem = Option ($1, { pos = get_pos_full ~s:2 4; pelem = $3 }) }} -| value AND value {{ pos = get_pos_full 3 ; pelem = Logop ({ pos = get_pos 2 ; pelem = `And },$1,$3) }} -| value OR value {{ pos = get_pos_full 3 ; pelem = Logop ({ pos = get_pos 2 ; pelem = `Or },$1,$3) }} -| atom RELOP atom {{ pos = get_pos_full 3 ; pelem = Relop ({ pos = get_pos 2 ; pelem = $2 },$1,$3) }} -| atom ENVOP atom {{ pos = get_pos_full 3 ; pelem = Env_binding ($1,{ pos = get_pos 2 ; pelem = $2 },$3) }} -| PFXOP value {{ pos = get_pos_full 2 ; pelem = Pfxop ({ pos = get_pos 1 ; pelem = $1 },$2) }} -| RELOP atom {{ pos = get_pos_full 2 ; pelem = Prefix_relop ({ pos = get_pos 1 ; pelem = $1 },$2) }} +| LPAR values RPAR {{ pos = get_pos $startpos($1) $endpos($3) ; pelem = Group { pos = get_pos $startpos($1) $endpos($3); pelem = $2 } }} +| LBRACKET values RBRACKET {{ pos = get_pos $startpos($1) $endpos($3) ; pelem = List { pos = get_pos $startpos($1) $endpos($3); pelem = $2 } }} +| valu_ LBRACE values RBRACE {{ pos = get_pos $startpos($1) $endpos($4) ; + pelem = Option ($1, { pos = get_pos $startpos($2) $endpos($4); pelem = $3 }) }} +| valu_ AND valu_ {{ pos = get_pos $startpos($1) $endpos($3) ; pelem = Logop ({ pos = get_pos $startpos($2) $endpos($2) ; pelem = `And },$1,$3) }} +| valu_ OR valu_ {{ pos = get_pos $startpos($1) $endpos($3) ; pelem = Logop ({ pos = get_pos $startpos($2) $endpos($2) ; pelem = `Or },$1,$3) }} +| atom RELOP atom {{ pos = get_pos $startpos($1) $endpos($3) ; pelem = Relop ({ pos = get_pos $startpos($2) $endpos($2) ; pelem = $2 },$1,$3) }} +| atom ENVOP atom {{ pos = get_pos $startpos($1) $endpos($3) ; pelem = Env_binding ($1,{ pos = get_pos $startpos($2) $endpos($2) ; pelem = $2 },$3) }} +| PFXOP valu_ {{ pos = get_pos $startpos($1) $endpos($2) ; pelem = Pfxop ({ pos = get_pos $startpos($1) $endpos($1) ; pelem = $1 },$2) }} +| RELOP atom {{ pos = get_pos $startpos($1) $endpos($2) ; pelem = Prefix_relop ({ pos = get_pos $startpos($1) $endpos($1) ; pelem = $1 },$2) }} ; values: | { [] } -| value values { $1 :: $2 } +| valu_ values { $1 :: $2 } ; atom: -| IDENT {{ pos = get_pos 1 ; pelem = Ident $1 }} -| BOOL {{ pos = get_pos 1 ; pelem = Bool $1 }} -| INT {{ pos = get_pos 1 ; pelem = Int $1 }} -| STRING {{ pos = get_pos 1 ; pelem = String $1 }} +| IDENT {{ pos = get_pos $startpos($1) $endpos($1) ; pelem = Ident $1 }} +| BOOL {{ pos = get_pos $startpos($1) $endpos($1) ; pelem = Bool $1 }} +| INT {{ pos = get_pos $startpos($1) $endpos($1) ; pelem = Int $1 }} +| STRING {{ pos = get_pos $startpos($1) $endpos($1) ; pelem = String $1 }} ; %% @@ -155,15 +152,6 @@ | Failure _ | End_of_file -> (0, 0) -let with_clear_parser f x = - try - let r = f x in - Parsing.clear_parser (); - r - with e -> - Parsing.clear_parser (); - raise e - (* Update a lexbuf with position information prior to raising an exception *) let reset_lexbuf_and_abort l file_name (start_line, start_col) (end_line, end_col) exn = let open Lexing in @@ -178,7 +166,7 @@ | Match_failure _ -> false | _ -> true -let get_three_tokens lexer lexbuf = +let get_three_tokens lexer lexbuf = let open Lexing in try let p0 = lexbuf.lex_start_p, lexbuf.lex_curr_p in @@ -236,9 +224,9 @@ an exception to be raised before the element has been fully parsed. In this case, we generate a single opam-version Variable to return. *) - {pelem = Variable({pelem = "opam-version"; pos = pos_of_lexing_pos p0 p1}, - {pelem = String ver; pos = pos_of_lexing_pos p2 p3}); - pos = pos_of_lexing_pos p0 p3} + {pelem = Variable({pelem = "opam-version"; pos = get_pos p0 p1}, + {pelem = String ver; pos = get_pos p2 p3}); + pos = get_pos p0 p3} in (header, (nopatch ver >= (2, 1)), (nopatch ver > version)) | _ -> @@ -262,7 +250,7 @@ lexer lexbuf in let result = - try with_clear_parser (main lexer lexbuf) file_name + try main lexer lexbuf file_name with e when trap_exceptions && not_fatal e -> (* Append a syntactically invalid sentinel section "#" to the version header which was manually parsed. That is then sufficient @@ -273,7 +261,7 @@ detect the parsing error. *) let sentinel = let pos = - Lexing.(pos_of_lexing_pos lexbuf.lex_start_p lexbuf.lex_curr_p) + Lexing.(get_pos lexbuf.lex_start_p lexbuf.lex_curr_p) in let section = {section_kind = {pelem = "#"; pos}; @@ -294,4 +282,10 @@ end; result -let value t l = with_clear_parser (value t) l +let main t l fn = + try main t l fn with + | Error -> raise Parsing.Parse_error + +let value t l = + try value t l with + | Error -> raise Parsing.Parse_error diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/src/opamLexer.mll new/opam-file-format-2.2.0/src/opamLexer.mll --- old/opam-file-format-2.1.6/src/opamLexer.mll 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/src/opamLexer.mll 2025-07-03 16:27:27.000000000 +0200 @@ -84,7 +84,7 @@ (* Some hash-consing for strings *) module HS = Weak.Make(struct include String let hash = Hashtbl.hash let equal = (=) end) -let hm = HS.create 317 +let hm = Domain.DLS.new_key (fun () -> HS.create 317) let buffer_rule r lb = @@ -93,7 +93,7 @@ r b lb ; (* buffer start position, instead of last lexem position *) lb.Lexing.lex_start_p <- pos; - HS.merge hm (Buffer.contents b) + HS.merge (Domain.DLS.get hm) (Buffer.contents b) } let eol = '\r'? '\n' @@ -131,7 +131,7 @@ | "true" { BOOL true } | "false"{ BOOL false } | int { INT (int_of_string (Lexing.lexeme lexbuf)) } -| ident { IDENT (HS.merge hm (Lexing.lexeme lexbuf)) } +| ident { IDENT (HS.merge (Domain.DLS.get hm) (Lexing.lexeme lexbuf)) } | relop { RELOP (FullPos.relop (Lexing.lexeme lexbuf)) } | '&' { AND } | '|' { OR } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/tests/Makefile new/opam-file-format-2.2.0/tests/Makefile --- old/opam-file-format-2.1.6/tests/Makefile 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/tests/Makefile 1970-01-01 01:00:00.000000000 +0100 @@ -1,13 +0,0 @@ -all: tests - -tests: - ocamlfind ocamlc tests.ml -o tests -linkpkg -package alcotest -package opam-file-format - -run: tests - ./tests - -.PHONY: clean -clean: - rm -f tests - rm -f *.cmi *.cmo - rm -rf _build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/tests/dune new/opam-file-format-2.2.0/tests/dune --- old/opam-file-format-2.1.6/tests/dune 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/tests/dune 2025-07-03 16:27:27.000000000 +0200 @@ -1,6 +1,6 @@ (test (name tests) (deps sample.opam) - (libraries alcotest opam-file-format)) + (libraries alcotest opam-file-format fmt)) (rule (copy sample-opam sample.opam)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/tests/hygiene/dune new/opam-file-format-2.2.0/tests/hygiene/dune --- old/opam-file-format-2.1.6/tests/hygiene/dune 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/tests/hygiene/dune 2025-07-03 16:27:27.000000000 +0200 @@ -6,7 +6,7 @@ (flags :standard (:include flags.sexp)) (action (run %{test} %{version:opam-file-format}))) -(ocamlyacc OpamBaseParser) +(menhir (modules OpamBaseParser) (infer false)) (rule (with-stdout-to OpamBaseParser.mly diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/tests/legacy/Makefile new/opam-file-format-2.2.0/tests/legacy/Makefile --- old/opam-file-format-2.1.6/tests/legacy/Makefile 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/tests/legacy/Makefile 1970-01-01 01:00:00.000000000 +0100 @@ -1,15 +0,0 @@ -.PHONY: test -test:: legacy.byte - -ifneq "$(shell ocamlopt -vnum 2>/dev/null)" "" -test:: legacy.native -endif - -src/%: - $(MAKE) -C src $* - -legacy.byte: src/opam-file-format.cma legacy.ml - ocamlc -o $@ -I src $^ - -legacy.native: src/opam-file-format.cmxa legacy.ml - ocamlopt -o $@ -I src $^ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/tests/legacy/dune new/opam-file-format-2.2.0/tests/legacy/dune --- old/opam-file-format-2.1.6/tests/legacy/dune 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/tests/legacy/dune 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -; This test (driven by Dune) ensures that the old build system works - -(copy_files ../../opam-file-format.opam) - -(alias - (name runtest) - (deps Makefile legacy.ml opam-file-format.opam (glob_files src/*)) - (action (run make test))) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/tests/legacy/legacy.ml new/opam-file-format-2.2.0/tests/legacy/legacy.ml --- old/opam-file-format-2.1.6/tests/legacy/legacy.ml 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/tests/legacy/legacy.ml 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -(* This "program" is used to verify that the library is linkable - see #40 *) -let file = OpamParser.FullPos.file "../opam-file-format.opam" -in Printf.printf "Successfully loaded %s\n" file.OpamParserTypes.FullPos.file_name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/tests/legacy/src/dune new/opam-file-format-2.2.0/tests/legacy/src/dune --- old/opam-file-format-2.1.6/tests/legacy/src/dune 2023-03-20 22:51:07.000000000 +0100 +++ new/opam-file-format-2.2.0/tests/legacy/src/dune 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -; We mustn't copy the dune file, but Dune's globbing has no syntax for that -(copy_files ../../../src/o*) -(copy_files ../../../src/M*) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/tests/simple/dune new/opam-file-format-2.2.0/tests/simple/dune --- old/opam-file-format-2.1.6/tests/simple/dune 1970-01-01 01:00:00.000000000 +0100 +++ new/opam-file-format-2.2.0/tests/simple/dune 2025-07-03 16:27:27.000000000 +0200 @@ -0,0 +1,6 @@ +(copy_files ../../opam-file-format.opam) + +(test + (name simple) + (deps opam-file-format.opam) + (libraries opam-file-format)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/opam-file-format-2.1.6/tests/simple/simple.ml new/opam-file-format-2.2.0/tests/simple/simple.ml --- old/opam-file-format-2.1.6/tests/simple/simple.ml 1970-01-01 01:00:00.000000000 +0100 +++ new/opam-file-format-2.2.0/tests/simple/simple.ml 2025-07-03 16:27:27.000000000 +0200 @@ -0,0 +1,3 @@ +(* This "program" is used to verify that the library is linkable - see #40 *) +let file = OpamParser.FullPos.file "./opam-file-format.opam" +in Printf.printf "Successfully loaded %s\n" file.OpamParserTypes.FullPos.file_name