[Pkg-ocaml-maint-commits] [findlib] 01/03: New upstream version 1.7.3

Ximin Luo infinity0 at debian.org
Fri Jul 21 17:14:01 UTC 2017


This is an automated email from the git hooks/post-receive script.

infinity0 pushed a commit to branch master
in repository findlib.

commit 6e0167f9fb5d8270dfdc5f7791c1bd06e284a362
Author: Ximin Luo <infinity0 at debian.org>
Date:   Thu Jul 6 22:08:55 2017 +0200

    New upstream version 1.7.3
---
 Makefile                |   4 +-
 configure               |  26 +++++-
 doc/README              |  10 +++
 doc/README.xml          |  17 ++++
 src/findlib/META.in     |  27 ++++--
 src/findlib/Makefile    |  12 +--
 src/findlib/frontend.ml | 217 ++++++++++++++++++++++++++++--------------------
 7 files changed, 209 insertions(+), 104 deletions(-)

diff --git a/Makefile b/Makefile
index e2b46c2..221af08 100644
--- a/Makefile
+++ b/Makefile
@@ -22,7 +22,7 @@ install:
 	$(MAKE) install-config
 	for p in $(PARTS); do ( cd src/$$p; $(MAKE) install ); done
 	$(MAKE) install-meta
-	cd src/findlib; $(MAKE) install-num-top
+	test -z "$(NUMTOP)" || { cd src/findlib; $(MAKE) install-num-top; }
 	if [ $(INSTALL_CAMLP4) -eq 1 ]; then \
 		cp tools/safe_camlp4 "$(prefix)$(OCAMLFIND_BIN)"; \
 	fi
@@ -55,7 +55,7 @@ findlib.conf: findlib.conf.in
 	USE_CYGPATH="$(USE_CYGPATH)"; \
 	export USE_CYGPATH; \
 	cat findlib.conf.in | \
-		tools/patch '@SITELIB@' '$(OCAML_SITELIB)' >findlib.conf
+	    $(SH) tools/patch '@SITELIB@' '$(OCAML_SITELIB)' >findlib.conf
 	if ./tools/cmd_from_same_dir ocamlc; then \
 		echo 'ocamlc="ocamlc.opt"' >>findlib.conf; \
 	fi
diff --git a/configure b/configure
index c43f584..6a4a558 100755
--- a/configure
+++ b/configure
@@ -7,7 +7,7 @@
 
 #set -x
 
-version="1.7.1"
+version="1.7.3"
 
 # Remember the old IFS value:
 oldifs="$IFS"
@@ -119,6 +119,7 @@ with_topfind=1
 with_camlp4=1
 custom=-custom
 system=""
+sh=""
 
 while [ "$#" != "0" ]; do
     case "$1" in
@@ -246,6 +247,13 @@ case "$system" in
 esac
 
 ######################################################################
+# check for presence of /bin/sh
+
+if [ ! -f /bin/sh ]; then
+    sh=sh
+fi
+
+######################################################################
 # Find out standard library location
 
 ocaml_core_stdlib=`get_stdlib`
@@ -514,6 +522,18 @@ else
     ldbm=""
 fi
 
+# num?
+
+if [ -f "${ocaml_core_stdlib}/num.cmi" ]; then
+    echo "num: found"
+    lnum="num num-top"
+    numtop="num-top"
+else
+    echo "num: not present (normal since OCaml-4.06)"
+    lnum=""
+    numtop=""
+fi
+
 # bytes?
 
 if [ -f "${ocaml_core_stdlib}/bytes.cmi" ]; then
@@ -539,7 +559,7 @@ fi
 
 # Generate the META files now.
 
-l="$ldbm dynlink graphics num num-top str threads unix stdlib bigarray ocamldoc $llabltk $lcamlp4 $lobuild $lcomplibs $lbytes $lspacetime"
+l="$ldbm dynlink graphics $lnum str threads unix stdlib bigarray ocamldoc $llabltk $lcamlp4 $lobuild $lcomplibs $lbytes $lspacetime"
 
 for dir in site-lib-src/*; do
     # We do not really know if $dir is a directory.
@@ -623,6 +643,8 @@ echo "HAVE_NATDYNLINK=${have_natdynlink}" >>Makefile.config
 echo "VERSION=${version}" >>Makefile.config
 echo "ENABLE_TOPFIND_PPXOPT=${enable_topfind_ppxopt}" >>Makefile.config
 echo "SYSTEM=${system}" >>Makefile.config
+echo "NUMTOP=${numtop}" >>Makefile.config
+echo "SH=${sh}" >>Makefile.config
 if [ "$mingw_lib" != "" ]; then
     echo "OCAMLC_FLAGS=-I \"${mingw_lib}\"" >>Makefile.config
     echo "OCAMLOPT_FLAGS=-I \"${mingw_lib}\"" >>Makefile.config
diff --git a/doc/README b/doc/README
index 6e3b0ae..2ad42d6 100644
--- a/doc/README
+++ b/doc/README
@@ -85,6 +85,16 @@ of questions.
 List of Changes
 ==============================================================================
 
+-  1.7.3: Fix regarding num-top: this library is now also  optional, as num.
+   
+-  1.7.2: Trying to protect against failures when  several package installs are 
+   done in parallel.
+   New subpackage "findlib.top" for the toploop (Jeremie Dimino).
+   The "num" library is now optional.
+   Shell scripts are started via "sh" command when there is no  /bin/sh (ygrek)
+   
+-  1.7.1: added missing file to tarball
+   
 -  1.7.0: New command "ocamlfind printppx" that outputs  how the ppx 
    preprocessor would be called (Hendrik Tews).
    Support for the raw_spacetime library that comes with  OCaml 4.04 (Gerd 
diff --git a/doc/README.xml b/doc/README.xml
index 5c6b019..248483e 100644
--- a/doc/README.xml
+++ b/doc/README.xml
@@ -110,6 +110,23 @@ configuration files, and library routines in detail.</p>
     <ul>
 
     <li>
+      <p><em>1.7.3:</em> Fix regarding num-top: this library is now also
+      optional, as num.</p>
+    </li>
+      
+    <li>
+      <p><em>1.7.2:</em> Trying to protect against failures when
+      several package installs are done in parallel.</p>
+
+      <p>New subpackage "findlib.top" for the toploop (Jeremie Dimino).</p>
+
+      <p>The "num" library is now optional.</p>
+
+      <p>Shell scripts are started via "sh" command when there is no
+      /bin/sh (ygrek)</p>
+    </li>
+      
+    <li>
      <p><em>1.7.1:</em> added missing file to tarball</p>
     </li>
 
diff --git a/src/findlib/META.in b/src/findlib/META.in
index ec57230..df850fb 100644
--- a/src/findlib/META.in
+++ b/src/findlib/META.in
@@ -1,13 +1,19 @@
 # specifications for "findlib":
 description = "Package manager"
-requires = ""
+requires = "findlib.internal"
+requires(toploop) += "findlib.top"
+requires(create_toploop) += "findlib.top"
 version = "@VERSION@"
-archive(byte) = "findlib.cma"
-archive(byte,toploop) = "findlib.cma findlib_top.cma"
-archive(byte,create_toploop) = "findlib.cma findlib_top.cma"
-archive(native) = "findlib.cmxa"
-plugin(byte) = "findlib.cma"
-plugin(native) = "findlib.cmxs"
+
+package "internal" (
+  version = "@VERSION@"
+  description = "Package manager"
+  requires = ""
+  archive(byte) = "findlib.cma"
+  archive(native) = "findlib.cmxa"
+  plugin(byte) = "findlib.cma"
+  plugin(native) = "findlib.cmxs"
+)
 
 package "dynload" (
   version = "@VERSION@"
@@ -20,3 +26,10 @@ package "dynload" (
   plugin(native) = "findlib_dynload.cmxs"
   linkopts = "-linkall"
 )
+
+package "top" (
+  version = "@VERSION@"
+  description = "Package manager toplevel support"
+  requires = "findlib.internal"
+  archive(byte) = "findlib_top.cma"
+)
diff --git a/src/findlib/Makefile b/src/findlib/Makefile
index 1385a6a..981760f 100644
--- a/src/findlib/Makefile
+++ b/src/findlib/Makefile
@@ -38,12 +38,14 @@ DYNLOAD_OBJECTS  = fl_dynload.cmo
 DYNLOAD_XOBJECTS = $(DYNLOAD_OBJECTS:.cmo=.cmx)
 
 
-all: ocamlfind$(EXEC_SUFFIX) findlib.cma findlib_top.cma topfind num_top.cma \
+all: ocamlfind$(EXEC_SUFFIX) findlib.cma findlib_top.cma topfind $(NUMTOP) \
      findlib_dynload.cma
 
 opt: ocamlfind_opt$(EXEC_SUFFIX) findlib.cmxa findlib_top.cmxa topfind \
      findlib_dynload.cmxa
 
+num-top: num_top.cma
+
 ocamlfind$(EXEC_SUFFIX): findlib.cma $(OCAMLFIND_OBJECTS)
 	$(OCAMLC) $(CUSTOM) -o ocamlfind$(EXEC_SUFFIX) -g findlib.cma unix.cma \
 	          $(OCAMLC_FLAGS) $(OCAMLFIND_OBJECTS)
@@ -86,8 +88,8 @@ findlib_config.ml: findlib_config.mlp $(TOP)/Makefile.config
 	USE_CYGPATH="$(USE_CYGPATH)"; \
 	export USE_CYGPATH; \
 	cat findlib_config.mlp | \
-		$(TOP)/tools/patch '@CONFIGFILE@' '$(OCAMLFIND_CONF)' | \
-		$(TOP)/tools/patch '@STDLIB@' '$(OCAML_CORE_STDLIB)' | \
+	        $(SH) $(TOP)/tools/patch '@CONFIGFILE@' '$(OCAMLFIND_CONF)' | \
+	        $(SH) $(TOP)/tools/patch '@STDLIB@' '$(OCAML_CORE_STDLIB)' | \
 		sed -e 's;@AUTOLINK@;$(OCAML_AUTOLINK);g' \
 		    -e 's;@SYSTEM@;$(SYSTEM);g' \
 		     >findlib_config.ml
@@ -107,7 +109,7 @@ topfind: topfind_rd$(OCAML_REMOVE_DIRECTORY).p
 	USE_CYGPATH="$(USE_CYGPATH)"; \
 	export USE_CYGPATH; \
 	cat topfind_rd$(OCAML_REMOVE_DIRECTORY).p | \
-		$(TOP)/tools/patch '@SITELIB@' '$(OCAML_SITELIB)' \
+	        $(SH) $(TOP)/tools/patch '@SITELIB@' '$(OCAML_SITELIB)' \
 	    	    >topfind
 
 num_top.cma: $(NUMTOP_OBJECTS)
@@ -122,7 +124,7 @@ install: all
 	mkdir -p "$(prefix)$(OCAML_SITELIB)/$(NAME)"
 	mkdir -p "$(prefix)$(OCAMLFIND_BIN)"
 	test $(INSTALL_TOPFIND) -eq 0 || cp topfind "$(prefix)$(OCAML_CORE_STDLIB)"
-	files=`$(TOP)/tools/collect_files $(TOP)/Makefile.config findlib.cmi findlib.mli findlib.cma findlib.cmxa findlib.a findlib.cmxs topfind.cmi topfind.mli fl_package_base.mli fl_package_base.cmi fl_metascanner.mli fl_metascanner.cmi fl_metatoken.cmi findlib_top.cma findlib_top.cmxa findlib_top.a findlib_top.cmxs findlib_dynload.cma findlib_dynload.cmxa findlib_dynload.a findlib_dynload.cmxs fl_dynload.mli fl_dynload.cmi META` && \
+	files=`$(SH) $(TOP)/tools/collect_files $(TOP)/Makefile.config findlib.cmi findlib.mli findlib.cma findlib.cmxa findlib.a findlib.cmxs topfind.cmi topfind.mli fl_package_base.mli fl_package_base.cmi fl_metascanner.mli fl_metascanner.cmi fl_metatoken.cmi findlib_top.cma findlib_top.cmxa findlib_top.a findlib_top.cmxs findlib_dynload.cma findlib_dynload.cmxa findlib_dynload.a findlib_dynload.cmxs fl_dynload.mli fl_dynload.cmi META` && \
 	cp $$files "$(prefix)$(OCAML_SITELIB)/$(NAME)"
 	f="ocamlfind$(EXEC_SUFFIX)"; { test -f ocamlfind_opt$(EXEC_SUFFIX) && f="ocamlfind_opt$(EXEC_SUFFIX)"; }; \
 	cp $$f "$(prefix)$(OCAMLFIND_BIN)/ocamlfind$(EXEC_SUFFIX)"
diff --git a/src/findlib/frontend.ml b/src/findlib/frontend.ml
index 01c67d4..f399d7d 100644
--- a/src/findlib/frontend.ml
+++ b/src/findlib/frontend.ml
@@ -25,6 +25,11 @@ and modifier =
   | Plus
 ;;
 
+let sys_error code arg =
+  if arg = "" then
+    Sys_error (Unix.error_message code)
+  else
+    Sys_error (arg ^ ": " ^ Unix.error_message code)
 
 
 let slashify s =
@@ -1859,14 +1864,27 @@ let find_owned_files pkg dir =
 	 else
 	   file ^ ".owner" in
        (List.mem owner_file files) && (
-	 let f = open_in (Filename.concat dir owner_file) in
-	 try
-	   let line = input_line f in
-	   let is_my_file = (line = pkg) in
-	   close_in f;
-	   is_my_file
-	 with
-	     exc -> close_in f; raise exc
+         try
+           let fd =
+             Unix.openfile (Filename.concat dir owner_file) [Unix.O_RDONLY] 0 in
+           let f =
+             Unix.in_channel_of_descr fd in
+           try
+             let line = input_line f in
+             let is_my_file = (line = pkg) in
+             close_in f;
+             is_my_file
+           with
+             | End_of_file -> close_in f; false
+             | exc -> close_in f; raise exc
+         with
+           | Unix.Unix_error(Unix.ENOENT,_,_) ->
+               (* the owner file might have been removed by a package
+                  removal that is being done in parallel
+                *)
+               false
+           | Unix.Unix_error(code, _, arg) ->
+               raise(sys_error code arg)
        )
     )
     files
@@ -2118,7 +2136,7 @@ let install_package () =
   (* Create the package directory: *)
   install_create_directory !pkgname pkgdir;
 
-  (* Now copy the files into the package directory: *)
+  (* Now copy the files into the package directory (except META): *)
   List.iter
     (fun p ->
        try
@@ -2135,38 +2153,6 @@ let install_package () =
     )
     pkgdir_list;
 
-  (* Now write the META file: *)
-  let write_meta append_directory dir name =
-    (* If there are patches, write the patched META, else copy the file: *)
-    if !patches = [] then
-      copy_file 
-	~rename:(fun _ -> name)
-        ?append:(if append_directory then
-		   Some("\ndirectory=\"" ^ pkgdir ^ 
-			  "\" # auto-added by ocamlfind\n")
-		 else
-		   None)
-	meta_name
-	dir
-    else (
-      let p = Filename.concat dir name in
-      let patched_pkg = patch_pkg pkgdir meta_pkg !patches in
-      let out = open_out p in
-        Fl_metascanner.print out patched_pkg;
-      if append_directory then
-	output_string out ("\ndirectory=\"" ^ pkgdir ^ 
-			     "\" # auto-added by ocamlfind\n");
-      close_out out;
-      prerr_endline ("Installed " ^ p);
-    )
-  in
-  if not !add_files then (
-    if has_metadir then
-      write_meta true !metadir meta_dot_pkg
-    else
-      write_meta false pkgdir "META";
-  );
-
   (* Copy the DLLs into the libexec directory if necessary *)
   if have_libexec then begin
     List.iter
@@ -2209,6 +2195,38 @@ let install_package () =
       prerr_endline("ocamlfind: [WARNING] You have installed DLLs but the directory " ^ dlldir_norm ^ " is not mentioned in ld.conf");
   end;
 
+  (* Finally, write the META file: *)
+  let write_meta append_directory dir name =
+    (* If there are patches, write the patched META, else copy the file: *)
+    if !patches = [] then
+      copy_file 
+	~rename:(fun _ -> name)
+        ?append:(if append_directory then
+		   Some("\ndirectory=\"" ^ pkgdir ^ 
+			  "\" # auto-added by ocamlfind\n")
+		 else
+		   None)
+	meta_name
+	dir
+    else (
+      let p = Filename.concat dir name in
+      let patched_pkg = patch_pkg pkgdir meta_pkg !patches in
+      let out = open_out p in
+        Fl_metascanner.print out patched_pkg;
+      if append_directory then
+	output_string out ("\ndirectory=\"" ^ pkgdir ^ 
+			     "\" # auto-added by ocamlfind\n");
+      close_out out;
+      prerr_endline ("Installed " ^ p);
+    )
+  in
+  if not !add_files then (
+    if has_metadir then
+      write_meta true !metadir meta_dot_pkg
+    else
+      write_meta false pkgdir "META";
+  );
+
   (* Check if there is a postinstall script: *)
   let postinstall = Filename.concat !destdir "postinstall" in
   if Sys.file_exists postinstall then
@@ -2277,57 +2295,80 @@ let remove_package () =
 	Unix.Unix_error(_,_,_) -> ()    (* ignore, it's only a warning *)
   end;
 
+  (* First remove the META file. If it is already gone, assume that a
+     parallel running removal removed it already.
+   *)
+
   (* If there is a metadir, remove the META file from it: *)
-  if has_metadir then begin
-    let f = Filename.concat !metadir meta_dot_pkg in
-    if Sys.file_exists f then begin
-      Sys.remove f;
-      prerr_endline ("Removed " ^ f);
-    end
-    else
-      prerr_endline ("ocamlfind: [WARNING] No such file: " ^ f)
-  end;
+  let meta_removal_ok =
+    if has_metadir then (
+      let f = Filename.concat !metadir meta_dot_pkg in
+      try
+        Unix.unlink f;
+        prerr_endline ("Removed " ^ f);
+        true
+      with
+        | Unix.Unix_error(Unix.ENOENT,_,_) ->
+            prerr_endline ("ocamlfind: [WARNING] No such file: " ^ f);
+            false
+        | Unix.Unix_error(code, _, arg) ->
+            raise(sys_error code arg)
+    ) else
+      let f = Filename.concat pkgdir "META" in
+      try
+        Unix.unlink f;
+        prerr_endline ("Removed " ^ f);
+        true
+      with
+        | Unix.Unix_error(Unix.ENOENT,_,_) ->
+            prerr_endline ("ocamlfind: [WARNING] No such file: " ^ f);
+            false
+        | Unix.Unix_error(code, _, arg) ->
+            raise(sys_error code arg) in
 
-  (* Remove files from libexec directory: *)
-  if have_libexec then begin
-    let dll_files = find_owned_files !pkgname dlldir in
-    List.iter
-      (fun file ->
-	 let absfile = Filename.concat dlldir file in
-	 Sys.remove absfile;
-	 prerr_endline ("Removed " ^ absfile)
-      )
-      dll_files
-  end;
+  if meta_removal_ok then (
 
-  (* Remove the files from the package directory: *)
-  if Sys.file_exists pkgdir then begin
-    let files = Sys.readdir pkgdir in
-    Array.iter (fun f -> Sys.remove (Filename.concat pkgdir f)) files;
-    Unix.rmdir pkgdir;
-    prerr_endline ("Removed " ^ pkgdir)
-  end
-  else
-    prerr_endline("ocamlfind: [WARNING] No such directory: " ^ pkgdir);
+    (* Remove files from libexec directory: *)
+    if have_libexec then begin
+      let dll_files = find_owned_files !pkgname dlldir in
+      List.iter
+        (fun file ->
+           let absfile = Filename.concat dlldir file in
+           Sys.remove absfile;
+           prerr_endline ("Removed " ^ absfile)
+        )
+        dll_files
+    end;
 
-  (* Modify ld.conf *)
-  if !ldconf <> "ignore" then begin
-    if Sys.file_exists !ldconf then
-      begin
-	let lines = read_ldconf !ldconf in
-	let d = Fl_split.norm_dir pkgdir in
-	let exists = List.exists (fun p -> Fl_split.norm_dir p = d) lines in
-	if exists then begin
-	  let lines' = List.filter (fun p -> Fl_split.norm_dir p <> d) lines in
-	  write_ldconf !ldconf lines' []
-	end
-      end
-  end;
+    (* Remove the files from the package directory: *)
+    if Sys.file_exists pkgdir then begin
+      let files = Sys.readdir pkgdir in
+      Array.iter (fun f -> Sys.remove (Filename.concat pkgdir f)) files;
+      Unix.rmdir pkgdir;
+      prerr_endline ("Removed " ^ pkgdir)
+    end
+    else
+      prerr_endline("ocamlfind: [WARNING] No such directory: " ^ pkgdir);
+
+    (* Modify ld.conf *)
+    if !ldconf <> "ignore" then begin
+      if Sys.file_exists !ldconf then
+        begin
+          let lines = read_ldconf !ldconf in
+          let d = Fl_split.norm_dir pkgdir in
+          let exists = List.exists (fun p -> Fl_split.norm_dir p = d) lines in
+          if exists then begin
+            let lines' = List.filter (fun p -> Fl_split.norm_dir p <> d) lines in
+            write_ldconf !ldconf lines' []
+          end
+        end
+    end;
 
-  (* Check if there is a postremove script: *)
-  let postremove = Filename.concat !destdir "postremove" in
-  if Sys.file_exists postremove then
-    run_command Verbose postremove [ slashify !destdir; !pkgname ]
+    (* Check if there is a postremove script: *)
+    let postremove = Filename.concat !destdir "postremove" in
+    if Sys.file_exists postremove then
+      run_command Verbose postremove [ slashify !destdir; !pkgname ]
+  )
 ;;
 
 
@@ -2445,7 +2486,7 @@ let lint () =
     (fun s -> if Sys.file_exists s
       then Queue.add s meta_files
       else raise(Arg.Bad (Printf.sprintf "%s: file doesn't exists" s)))
-    "usage: ocamlfind ocamldoc <options> <files>...";
+    "usage: ocamlfind lint <options> <files>...";
 
   let error =
     Queue.fold (fun error file ->

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/findlib.git



More information about the Pkg-ocaml-maint-commits mailing list