* [ITA] ocaml 4.14.0 @ 2022-07-04 2:03 William Hu 2022-07-04 17:03 ` Jon Turney 0 siblings, 1 reply; 20+ messages in thread From: William Hu @ 2022-07-04 2:03 UTC (permalink / raw) To: cygwin-apps [-- Attachment #1: Type: text/plain, Size: 430 bytes --] Hello, I noticed that the ocaml source package is currently unmaintained and the most recent package version is 4.10.0, so I'd like to adopt the packages under it (specifically, ocaml, ocaml-compiler-libs, ocaml-runtime, ocaml-doc, ocaml-ocamldoc, and ocaml-source). Attached is a cygport file that I've modified for the newest version 4.14.0. Please let me know if there's anything else that has to be done/changed. Thank you! [-- Attachment #2: ocaml.cygport --] [-- Type: application/octet-stream, Size: 2048 bytes --] NAME="ocaml" VERSION=4.14.0 RELEASE=1 CATEGORY="OCaml" SUMMARY="OCaml compilers" DESCRIPTION="OCaml is a fast modern type-inferring functional programming language descended from the ML (Meta Language) family, featuring objects, modules, and a high-performance native-code compiler. The OCaml compiler is developed by a worldwide distributed team coordinated by the Gallium project-team at Inria Paris-Rocquencourt." HOMEPAGE="https://ocaml.org/" SRC_URI="https://github.com/ocaml/ocaml/archive/${VERSION}.tar.gz" PATCH_URI="4.14.0-configure-cflags.patch" OCAML_LIBDIR=/usr/lib/ocaml KEEPDIRS="${D}/usr/lib/ocaml/ocamldoc/custom" PKG_NAMES="${NAME} ${NAME}-runtime ${NAME}-compiler-libs ${NAME}-ocamldoc ${NAME}-source ${NAME}-doc" ocaml_OBSOLETES="ocaml-base emacs-ocaml" ocaml_REQUIRES="flexdll ${NAME}-runtime" ocaml_CONTENTS=" --exclude=camlheader[di].exe --exclude=compiler-libs --exclude=ocamldoc* --exclude=ocamlrun* --exclude=stublibs --exclude=*.ml --exclude=*.cma --exclude=*.cmi --exclude=*.cmo usr/bin/ocaml* ${OCAML_LIBDIR#/}/ usr/share/doc/${NAME}/ usr/share/man/man1/ " ocaml_runtime_SUMMARY="OCaml bytecode runtime" ocaml_runtime_CONTENTS=" usr/bin/ocamlrun* ${OCAML_LIBDIR#/}/camlheader[di].exe ${OCAML_LIBDIR#/}/*.cm[aio] ${OCAML_LIBDIR#/}/stublibs/ ${OCAML_LIBDIR#/}/threads/*.cm[ai] usr/share/man/man1/ocamlrun* " ocaml_compiler_libs_SUMMARY="OCaml compiler internals" ocaml_compiler_libs_REQUIRES=${NAME} ocaml_compiler_libs_CONTENTS="${OCAML_LIBDIR#/}/compiler-libs/" ocaml_ocamldoc_SUMMARY="OCaml documentation generator" ocaml_ocamldoc_CONTENTS=" usr/bin/ocamldoc* ${OCAML_LIBDIR#/}/ocamldoc/ usr/share/man/man1/ocamldoc* " ocaml_source_SUMMARY="OCaml standard library sources" ocaml_source_CONTENTS="${OCAML_LIBDIR#/}/*.ml" ocaml_doc_SUMMARY="OCaml API documentation" ocaml_doc_CONTENTS="usr/share/man/man3/" src_compile() { lndirs cd ${B} ./configure --prefix=/usr || error "configure failed" cygmake } src_test() { : cd ${B}/testsuite cygmake all } src_install() { cd ${B} cyginstall } ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [ITA] ocaml 4.14.0 2022-07-04 2:03 [ITA] ocaml 4.14.0 William Hu @ 2022-07-04 17:03 ` Jon Turney 2022-07-05 0:42 ` William Hu 0 siblings, 1 reply; 20+ messages in thread From: Jon Turney @ 2022-07-04 17:03 UTC (permalink / raw) To: William Hu, cygwin-apps On 04/07/2022 03:03, William Hu via Cygwin-apps wrote: > Hello, > > I noticed that the ocaml source package is currently unmaintained and the most recent package version is 4.10.0, so I'd like to adopt the packages under it (specifically, ocaml, ocaml-compiler-libs, ocaml-runtime, ocaml-doc, ocaml-ocamldoc, and ocaml-source). Attached is a cygport file that I've modified for the newest version 4.14.0. Please let me know if there's anything else that has to be done/changed. Thank you! Thanks! I wasn't able to test your cygport file as you didn't attach the patch it references, but it looks correct: Please consider adding: LICENSE="LGPL-2.1-or-later" BUILD_REQUIRES="flexdll" (I think that's all that's needed?) Please provide a SSH key as explained here: https://cygwin.com/packaging/key.html ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [ITA] ocaml 4.14.0 2022-07-04 17:03 ` Jon Turney @ 2022-07-05 0:42 ` William Hu 2022-07-05 19:44 ` Jon Turney 0 siblings, 1 reply; 20+ messages in thread From: William Hu @ 2022-07-05 0:42 UTC (permalink / raw) To: Jon Turney; +Cc: cygwin-apps [-- Attachment #1: Type: text/plain, Size: 1121 bytes --] Hi Jon, Oops, sorry about that. The patch and updated cygport are now attached. Sending SSH key shortly. Thanks, William ------- Original Message ------- On Monday, July 4th, 2022 at 1:03 PM, Jon Turney <jon.turney@dronecode.org.uk> wrote: > On 04/07/2022 03:03, William Hu via Cygwin-apps wrote: > > > Hello, > > > > I noticed that the ocaml source package is currently unmaintained and the most recent package version is 4.10.0, so I'd like to adopt the packages under it (specifically, ocaml, ocaml-compiler-libs, ocaml-runtime, ocaml-doc, ocaml-ocamldoc, and ocaml-source). Attached is a cygport file that I've modified for the newest version 4.14.0. Please let me know if there's anything else that has to be done/changed. Thank you! > > > Thanks! > > I wasn't able to test your cygport file as you didn't attach the patch > it references, but it looks correct: > > > Please consider adding: > > LICENSE="LGPL-2.1-or-later" > BUILD_REQUIRES="flexdll" (I think that's all that's needed?) > > > Please provide a SSH key as explained here: > > https://cygwin.com/packaging/key.html [-- Attachment #2: ocaml.cygport --] [-- Type: application/octet-stream, Size: 2101 bytes --] NAME="ocaml" VERSION=4.14.0 RELEASE=1 CATEGORY="OCaml" SUMMARY="OCaml compilers" DESCRIPTION="OCaml is a fast modern type-inferring functional programming language descended from the ML (Meta Language) family, featuring objects, modules, and a high-performance native-code compiler. The OCaml compiler is developed by a worldwide distributed team coordinated by the Gallium project-team at Inria Paris-Rocquencourt." HOMEPAGE="https://ocaml.org/" LICENSE="LGPL-2.1-or-later" BUILD_REQUIRES="flexdll" SRC_URI="https://github.com/ocaml/ocaml/archive/${VERSION}.tar.gz" PATCH_URI="4.14.0-configure-cflags.patch" OCAML_LIBDIR=/usr/lib/ocaml KEEPDIRS="${D}/usr/lib/ocaml/ocamldoc/custom" PKG_NAMES="${NAME} ${NAME}-runtime ${NAME}-compiler-libs ${NAME}-ocamldoc ${NAME}-source ${NAME}-doc" ocaml_OBSOLETES="ocaml-base emacs-ocaml" ocaml_REQUIRES="flexdll ${NAME}-runtime" ocaml_CONTENTS=" --exclude=camlheader[di].exe --exclude=compiler-libs --exclude=ocamldoc* --exclude=ocamlrun* --exclude=stublibs --exclude=*.ml --exclude=*.cma --exclude=*.cmi --exclude=*.cmo usr/bin/ocaml* ${OCAML_LIBDIR#/}/ usr/share/doc/${NAME}/ usr/share/man/man1/ " ocaml_runtime_SUMMARY="OCaml bytecode runtime" ocaml_runtime_CONTENTS=" usr/bin/ocamlrun* ${OCAML_LIBDIR#/}/camlheader[di].exe ${OCAML_LIBDIR#/}/*.cm[aio] ${OCAML_LIBDIR#/}/stublibs/ ${OCAML_LIBDIR#/}/threads/*.cm[ai] usr/share/man/man1/ocamlrun* " ocaml_compiler_libs_SUMMARY="OCaml compiler internals" ocaml_compiler_libs_REQUIRES=${NAME} ocaml_compiler_libs_CONTENTS="${OCAML_LIBDIR#/}/compiler-libs/" ocaml_ocamldoc_SUMMARY="OCaml documentation generator" ocaml_ocamldoc_CONTENTS=" usr/bin/ocamldoc* ${OCAML_LIBDIR#/}/ocamldoc/ usr/share/man/man1/ocamldoc* " ocaml_source_SUMMARY="OCaml standard library sources" ocaml_source_CONTENTS="${OCAML_LIBDIR#/}/*.ml" ocaml_doc_SUMMARY="OCaml API documentation" ocaml_doc_CONTENTS="usr/share/man/man3/" src_compile() { lndirs cd ${B} ./configure --prefix=/usr || error "configure failed" cygmake } src_test() { : cd ${B}/testsuite cygmake all } src_install() { cd ${B} cyginstall } [-- Attachment #3: 4.14.0-configure-cflags.patch --] [-- Type: application/octet-stream, Size: 401 bytes --] --- origsrc/ocaml-4.14.0/configure 2022-03-28 08:27:36.000000000 -0400 +++ src/ocaml-4.14.0/configure 2022-06-28 21:29:43.682865800 -0400 @@ -13084,6 +13084,7 @@ CC="$flexlink -chain $flexdll_chain -exe" LIBS="conftest2.$ac_objext" CPPFLAGS="$internal_cppflags $CPPFLAGS" + CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main() { return 0; } ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [ITA] ocaml 4.14.0 2022-07-05 0:42 ` William Hu @ 2022-07-05 19:44 ` Jon Turney 2022-07-13 2:56 ` William Hu 0 siblings, 1 reply; 20+ messages in thread From: Jon Turney @ 2022-07-05 19:44 UTC (permalink / raw) To: William Hu, cygwin-apps On 05/07/2022 01:42, William Hu via Cygwin-apps wrote: > Hi Jon, > > Oops, sorry about that. The patch and updated cygport are now attached. > Sending SSH key shortly. Thanks. Firstly, I notice that you dropped 4.10.0-libcamlrun_shared.patch. Can you explain the reasoning behind that? (After a bit of digging, I found this mail https://cygwin.com/pipermail/cygwin/2010-October/191524.html which explains the rationale behind it) Next, when I try to build this: on x86: > checking whether fma works... no > configure: error: fma does not work, enable emulation with --enable-imprecise-c99-float-ops I guess perhaps that configure option needs to be conditionally used on x86? >>>> ocaml-runtime-4.14.0-1.tar.xz > usr/bin/ocamlrun.exe > usr/bin/ocamlrund.exe > usr/bin/ocamlruni.exe > tar: usr/lib/ocaml/camlheader[di].exe: Cannot stat: No such file or directory [...] > tar: Exiting with failure status due to previous errors > *** ERROR: Binary package creation failed: ocaml-runtime camlheader[di] are made without the .exe extensions (you've changed the cygport to add the exe, so maybe this was wrong before as they are executables) I'm not sure if that's a missing bit of patching or something different in your environment? > $ cygport ocaml.cygport test >>>> Testing ocaml-4.14.0-1.x86_64 > Makefile:162: *** ocamltest not found in ../ocamltest. Stop. > make: *** [Makefile:156: all] Error 2 > *** ERROR: make failed Seems like this requires the --enable-ocamltest configure option? ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [ITA] ocaml 4.14.0 2022-07-05 19:44 ` Jon Turney @ 2022-07-13 2:56 ` William Hu 2022-07-13 15:41 ` David Allsopp 2022-07-16 14:05 ` Jon Turney 0 siblings, 2 replies; 20+ messages in thread From: William Hu @ 2022-07-13 2:56 UTC (permalink / raw) To: Jon Turney; +Cc: cygwin-apps [-- Attachment #1: Type: text/plain, Size: 4324 bytes --] Apologies, meant to click reply-all. Hi Jon, Thanks for all of the detailed feedback - I'll test the package more thoroughly next time. 1) libcamlrun: Oops, that's another oversight, forgot to look at the old patches. The other 3 patches seem unnecessary, but I had trouble linking either libcamlrun_shared.so or libcamlrun_shared.dll.a into a program (unresolved symbol errors). Added but it possibly needs further patching. I'll keep on digging. 1.5) I checked for other differences between the cygports to make sure I didn't miss anything else. I made some edits to src_install: I removed `dodoc Updating` since there doesn't seem to be a file named "Updating". I also removed symlinking header files to /usr/include. From what I understood, the OCaml documentation says the headers should "reside in the caml/ subdirectory of the OCaml standard library directory, which is returned by the command ocamlc -where (usually /usr/local/lib/ocaml or /usr/lib/ocaml)". Obviously the symlink doesn't move anything, but since their location is well documented I didn't see a reason to have the extra symlinks. Please let me know if this is too large of a change or there's a Cygwin (or non-Cygwin) convention that precludes this - I'm still getting the hang of this. 2) fma on x86: I'm actually getting the same error, but the tests should ostensibly pass on Cygwin32. I'll also look into this. 3) Interesting - on my machine, the camlheader[di] files had the .exe extensions. I did some digging around and found the files are *built* without the .exe suffix, and even *initially installed* without the .exe suffix, but ultimately come out with the .exe suffix. I ran cyport in debug mode and apparently the files are being renamed with the suffix post-install: + case "${exe##*/}" in + mv usr/lib/ocaml/camlheaderd usr/lib/ocaml/camlheaderd.exe + exe+=.exe and did a little more digging and I think these lines in cygport are the cause: https://github.com/cygwin/cygport/blob/096f27644bd3b28f29d7522e816bebd327cf24cb/lib/src_postinst.cygpart#L1010 On the topic of "testing more thoroughly", I attempted to use ocamlc to compile a simple program and it fails with "Cannot find file camlheader" but works when I remove the ".exe", so it seems that the presence of the .exe suffixes breaks the compiler. Is there a way to prevent cygport from adding it? 4) Thanks for the catch. Added --enable-ocamltest to the cygport. William ------- Original Message ------- On Tuesday, July 5th, 2022 at 3:44 PM, Jon Turney <jon.turney@dronecode.org.uk> wrote: > On 05/07/2022 01:42, William Hu via Cygwin-apps wrote: > > > Hi Jon, > > > > Oops, sorry about that. The patch and updated cygport are now attached. > > Sending SSH key shortly. > > > Thanks. > > Firstly, I notice that you dropped 4.10.0-libcamlrun_shared.patch. Can > you explain the reasoning behind that? > > (After a bit of digging, I found this mail > https://cygwin.com/pipermail/cygwin/2010-October/191524.html which > explains the rationale behind it) > > Next, when I try to build this: > > on x86: > > > checking whether fma works... no > > configure: error: fma does not work, enable emulation with --enable-imprecise-c99-float-ops > > > I guess perhaps that configure option needs to be conditionally used on x86? > > > > > > ocaml-runtime-4.14.0-1.tar.xz > > > > > usr/bin/ocamlrun.exe > > > > > usr/bin/ocamlrund.exe > > > > > usr/bin/ocamlruni.exe > > > > > tar: usr/lib/ocaml/camlheader[di].exe: Cannot stat: No such file or directory > > [...] > > > tar: Exiting with failure status due to previous errors > > *** ERROR: Binary package creation failed: ocaml-runtime > > > camlheader[di] are made without the .exe extensions (you've changed the > cygport to add the exe, so maybe this was wrong before as they are > executables) > > I'm not sure if that's a missing bit of patching or something different > in your environment? > > > $ cygport ocaml.cygport test > > > > > > > Testing ocaml-4.14.0-1.x86_64 > > > > > Makefile:162: *** ocamltest not found in ../ocamltest. Stop. > > > > > make: *** [Makefile:156: all] Error 2 > > > > > *** ERROR: make failed > > > Seems like this requires the --enable-ocamltest configure option? [-- Attachment #2: ocaml.cygport --] [-- Type: application/octet-stream, Size: 2183 bytes --] NAME="ocaml" VERSION=4.14.0 RELEASE=1 CATEGORY="OCaml" SUMMARY="OCaml compilers" DESCRIPTION="OCaml is a fast modern type-inferring functional programming language descended from the ML (Meta Language) family, featuring objects, modules, and a high-performance native-code compiler. The OCaml compiler is developed by a worldwide distributed team coordinated by the Gallium project-team at Inria Paris-Rocquencourt." HOMEPAGE="https://ocaml.org/" LICENSE="LGPL-2.1-or-later" BUILD_REQUIRES="flexdll" SRC_URI="https://github.com/ocaml/ocaml/archive/${VERSION}.tar.gz" PATCH_URI=" 4.14.0-configure-cflags.patch 4.14.0-libcamlrun_shared.patch " OCAML_LIBDIR=/usr/lib/ocaml KEEPDIRS="${D}/usr/lib/ocaml/ocamldoc/custom" PKG_NAMES="${NAME} ${NAME}-runtime ${NAME}-compiler-libs ${NAME}-ocamldoc ${NAME}-source ${NAME}-doc" ocaml_OBSOLETES="ocaml-base emacs-ocaml" ocaml_REQUIRES="flexdll ${NAME}-runtime" ocaml_CONTENTS=" --exclude=camlheader[di].exe --exclude=compiler-libs --exclude=ocamldoc* --exclude=ocamlrun* --exclude=stublibs --exclude=*.ml --exclude=*.cma --exclude=*.cmi --exclude=*.cmo usr/bin/cyg*run_shared.dll usr/bin/ocaml* ${OCAML_LIBDIR#/}/ usr/share/doc/${NAME}/ usr/share/man/man1/ " ocaml_runtime_SUMMARY="OCaml bytecode runtime" ocaml_runtime_CONTENTS=" usr/bin/ocamlrun* ${OCAML_LIBDIR#/}/camlheader[di].exe ${OCAML_LIBDIR#/}/*.cm[aio] ${OCAML_LIBDIR#/}/stublibs/ ${OCAML_LIBDIR#/}/threads/*.cm[ai] usr/share/man/man1/ocamlrun* " ocaml_compiler_libs_SUMMARY="OCaml compiler internals" ocaml_compiler_libs_REQUIRES=${NAME} ocaml_compiler_libs_CONTENTS="${OCAML_LIBDIR#/}/compiler-libs/" ocaml_ocamldoc_SUMMARY="OCaml documentation generator" ocaml_ocamldoc_CONTENTS=" usr/bin/ocamldoc* ${OCAML_LIBDIR#/}/ocamldoc/ usr/share/man/man1/ocamldoc* " ocaml_source_SUMMARY="OCaml standard library sources" ocaml_source_CONTENTS="${OCAML_LIBDIR#/}/*.ml" ocaml_doc_SUMMARY="OCaml API documentation" ocaml_doc_CONTENTS="usr/share/man/man3/" src_compile() { lndirs cd ${B} ./configure --prefix=/usr --enable-ocamltest || error "configure failed" cygmake } src_test() { : cd ${B}/testsuite cygmake all } src_install() { cd ${B} cyginstall } [-- Attachment #3: 4.14.0-libcamlrun_shared.patch --] [-- Type: application/octet-stream, Size: 1526 bytes --] --- origsrc/ocaml-4.14.0/runtime/Makefile 2022-03-28 08:27:36.000000000 -0400 +++ src/ocaml-4.14.0/runtime/Makefile 2022-07-10 22:37:06.338715000 -0400 @@ -74,9 +74,9 @@ ifeq "$(UNIX_OR_WIN32)" "unix" ifeq "$(SUPPORTS_SHARED_LIBRARIES)" "true" BYTECODE_STATIC_LIBRARIES += libcamlrun_pic.$(A) -BYTECODE_SHARED_LIBRARIES += libcamlrun_shared.$(SO) +BYTECODE_SHARED_LIBRARIES += libcamlrun_shared.dll.a NATIVE_STATIC_LIBRARIES += libasmrun_pic.$(A) -NATIVE_SHARED_LIBRARIES += libasmrun_shared.$(SO) +NATIVE_SHARED_LIBRARIES += libasmrun_shared.dll.a endif endif @@ -164,6 +164,7 @@ ifneq "$(BYTECODE_SHARED_LIBRARIES)" "" $(INSTALL_PROG) $(BYTECODE_SHARED_LIBRARIES) "$(INSTALL_LIBDIR)" endif + $(INSTALL_PROG) cygasmrun_shared.dll cygcamlrun_shared.dll "$(INSTALL_BINDIR)" mkdir -p "$(INSTALL_INCDIR)" $(INSTALL_DATA) caml/domain_state.tbl caml/*.h "$(INSTALL_INCDIR)" @@ -294,6 +295,9 @@ libcamlrun_shared.$(SO): $(libcamlrunpic_OBJECTS) $(MKDLL) -o $@ $^ $(BYTECCLIBS) +libcamlrun_shared.dll.a: $(libcamlrunpic_OBJECTS) + $(MKDLL) -o cygcamlrun_shared.dll -link -Wl,--out-implib,$@ $^ $(BYTECCLIBS) + libasmrun.$(A): $(libasmrun_OBJECTS) $(call MKLIB,$@, $^) @@ -309,6 +313,9 @@ libasmrun_shared.$(SO): $(libasmrunpic_OBJECTS) $(MKDLL) -o $@ $^ $(NATIVECCLIBS) +libasmrun_shared.dll.a: $(libasmrunpic_OBJECTS) + $(MKDLL) -o cygasmrun_shared.dll -link -Wl,--out-implib,$@ $^ $(BYTECCLIBS) + # Target-specific preprocessor and compiler flags %.bd.$(O): OC_CPPFLAGS += $(OC_DEBUG_CPPFLAGS) ^ permalink raw reply [flat|nested] 20+ messages in thread
* RE: [ITA] ocaml 4.14.0 2022-07-13 2:56 ` William Hu @ 2022-07-13 15:41 ` David Allsopp 2022-07-14 3:36 ` William Hu 2022-07-16 14:22 ` Jon Turney 2022-07-16 14:05 ` Jon Turney 1 sibling, 2 replies; 20+ messages in thread From: David Allsopp @ 2022-07-13 15:41 UTC (permalink / raw) To: William Hu, Jon Turney; +Cc: cygwin-apps > 1) libcamlrun: Oops, that's another oversight, forgot to look at the old > patches. The other 3 patches seem unnecessary, but I had trouble linking > either libcamlrun_shared.so or libcamlrun_shared.dll.a into a program > (unresolved symbol errors). Added but it possibly needs further patching. > I'll keep on digging. What were the missing symbols? With the OCaml 4.10 package, I hit problems with this: echo 'print_endline "hello, world"' > hello.ml ocamlc -custom -runtime-variant _shared -o hello.exe hello.ml I think that may be an issue upstream (libasmrun_shared.so IIRC is broken on all platforms - on Cygwin, you can just about to persuade it to get to the same symbol errors because of the extra .dll.a file which gets generated). > 1.5) I checked for other differences between the cygports to make sure I > didn't miss anything else. I made some edits to src_install: I removed > `dodoc Updating` since there doesn't seem to be a file named "Updating". > I also removed symlinking header files to /usr/include. From what I > understood, the OCaml documentation says the headers should "reside in > the caml/ subdirectory of the OCaml standard library directory, which is > returned by the command ocamlc -where (usually /usr/local/lib/ocaml or > /usr/lib/ocaml)". Obviously the symlink doesn't move anything, but since > their location is well documented I didn't see a reason to have the extra > symlinks. Please let me know if this is too large of a change or there's > a Cygwin (or non-Cygwin) convention that precludes this - I'm still > getting the hang of this. > 2) fma on x86: I'm actually getting the same error, but the tests should > ostensibly pass on Cygwin32. I'll also look into this. What's the full configuration command and what gets inferred for the build, host and target triplets? fma should work without emulation in Cygwin32 and it should be detecting as failing on Cygwin64 but the emulation should be enabled by default unless you explicitly passed --disable-imprecise-c99-float-ops. > 3) Interesting - on my machine, the camlheader[di] files had the .exe > extensions. I did some digging around and found the files are *built* > without the .exe suffix, and even *initially installed* without the .exe > suffix, but ultimately come out with the .exe suffix. I ran cyport in > debug mode and apparently the files are being renamed with the suffix > post-install: > > + case "${exe##*/}" in > + mv usr/lib/ocaml/camlheaderd usr/lib/ocaml/camlheaderd.exe > + exe+=.exe > > and did a little more digging and I think these lines in cygport are the > cause: > https://github.com/cygwin/cygport/blob/096f27644bd3b28f29d7522e816bebd327c > f24cb/lib/src_postinst.cygpart#L1010 > > On the topic of "testing more thoroughly", I attempted to use ocamlc to > compile a simple program and it fails with "Cannot find file camlheader" > but works when I remove the ".exe", so it seems that the presence of the > .exe suffixes breaks the compiler. Is there a way to prevent cygport from > adding it? The camlheader files are data files and definitely mustn't be installed with a .exe extension (nor do they need to be executable). Incidentally, OCaml 4.12+ is also likely to run into problems if flexlink is older than 0.39 - I just removed the test mark from the flexdll 0.39 package (which I thought I'd done quite some time ago...) HTH, David ^ permalink raw reply [flat|nested] 20+ messages in thread
* RE: [ITA] ocaml 4.14.0 2022-07-13 15:41 ` David Allsopp @ 2022-07-14 3:36 ` William Hu 2022-07-14 14:56 ` David Allsopp 2022-07-16 14:22 ` Jon Turney 1 sibling, 1 reply; 20+ messages in thread From: William Hu @ 2022-07-14 3:36 UTC (permalink / raw) To: David Allsopp; +Cc: Jon Turney, cygwin-apps [-- Attachment #1: Type: text/plain, Size: 3033 bytes --] Hi David, > What were the missing symbols? With the OCaml 4.10 package, I hit problems with this: > > echo 'print_endline "hello, world"' > hello.ml > > ocamlc -custom -runtime-variant _shared -o hello.exe hello.ml > > I think that may be an issue upstream (libasmrun_shared.so IIRC is broken on all platforms - on Cygwin, you can just about to persuade it to get to the same symbol errors because of the extra .dll.a file which gets generated). It's a very long list of missing symbols (~400) so it's included as an attachment in case the mailing list truncates extremely lengthy emails. Also, just to note, the .dll.a file doesn't seem to be automatically generated by upstream OCaml. > What's the full configuration command and what gets inferred for the build, host and target triplets? fma should work without emulation in Cygwin32 and it should be detecting as failing on Cygwin64 but the emulation should be enabled by default unless you explicitly passed --disable-imprecise-c99-float-ops. Configuration command: ./configure --prefix=/usr --enable-ocamltest If it's relevant, I'm compiling on a 64-bit machine with Cygwin32 installed to compile the 32-bit version. Inferred build/host/target: configure:2779: Configuring OCaml version 4.14.0 configure:3007: checking build system type configure:3021: result: i686-pc-cygwin configure:3041: checking host system type configure:3054: result: i686-pc-cygwin configure:3074: checking target system type configure:3087: result: i686-pc-cygwin On Cygwin64, the test does fail and emulate by default: configure:14872: result: no configure:14896: WARNING: fma does not work; emulation enabled However, on Cygwin32, I get configure:14872: result: no configure:14894: error: fma does not work, enable emulation with --enable-imprecise-c99-float-ops config.log conveniently includes the program that fails, so I copy-pasted some very redundant code (attached) and ran it on the different architectures: Cygwin64: t264| ans: 0x0p+0 accept: 0x1.0989687cp-1044 0x1.09df287cp-1044 0x1.0ap-1044 t264| pass?: 0 t265| ans: 0x0p+0 accept: 0x1.0988p-1060 0x1.09ep-1060 0x1.0ap-1060 t265| pass?: 0 t266| ans: 0x1p-1074 accept: 0x1p-1073 t266| pass?: 0 Cygwin32: t264| ans: 0x1.0ap-1044 accept: 0x1.0989687cp-1044 0x1.09df287cp-1044 0x1.0ap-1044 t264| pass?: 1 t265| ans: 0x1.0ap-1060 accept: 0x1.0988p-1060 0x1.09ep-1060 0x1.0ap-1060 t265| pass?: 1 t266| ans: 0x1p-1073 accept: 0x1p-1073 t266| pass?: 1 The numbers look like they agree but configure doesn't think so for some reason. > The camlheader files are data files and definitely mustn't be installed with a .exe extension (nor do they need to be executable). > > Incidentally, OCaml 4.12+ is also likely to run into problems if flexlink is older than 0.39 - I just removed the test mark from the flexdll 0.39 package (which I thought I'd done quite some time ago...) > > HTH, > > > David Yep, these pointers help a ton! Thank you! William [-- Attachment #2: fma_configure_test.c --] [-- Type: text/plain, Size: 1029 bytes --] #include <math.h> #include <stdio.h> int main (void) { static volatile double x, y, z; double t264, t265, t266; x = 0x3.bd5b7dde5fddap-496; y = 0x3.bd5b7dde5fddap-496; z = -0xd.fc352bc352bap-992; t264 = fma(x, y, z); x = 0x3.bd5b7dde5fddap-504; y = 0x3.bd5b7dde5fddap-504; z = -0xd.fc352bc352bap-1008; t265 = fma(x, y, z); x = 0x8p-540; y = 0x4p-540; z = 0x4p-1076; t266 = fma(x, y, z); printf("t264| ans: %a accept: %a %a %a\nt264| pass?: %d\n", t264, 0x1.0989687cp-1044, 0x0.000004277ca1fp-1022, 0x0.00000428p-1022, t264 == 0x1.0989687cp-1044 || t264 == 0x0.000004277ca1fp-1022 || t264 == 0x0.00000428p-1022 ); printf("t265| ans: %a accept: %a %a %a\nt265| pass?: %d\n", t265, 0x1.0988p-1060, 0x0.0000000004278p-1022, 0x0.000000000428p-1022, t265 == 0x1.0988p-1060 || t265 == 0x0.0000000004278p-1022 || t265 == 0x0.000000000428p-1022 ); printf("t266| ans: %a accept: %a\nt266| pass?: %d\n", t266, 0x8p-1076, t266 == 0x8p-1076 ); return 0; } [-- Attachment #3: camlrun_shared_missing_symbols.txt --] [-- Type: text/plain, Size: 8709 bytes --] $ /usr/bin/ocamlc -verbose -custom -runtime-variant _shared -o hello.exe hello.ml + flexlink -chain cygwin64 -merge-manifest -stack 16777216 -exe -o 'hello.exe' '-L/usr/lib/ocaml' '-link' '-fdebug-prefix-map=/tmp/camlprim56f84c.c=camlprim.c' '/tmp/camlprim56f84c.c' '-lcamlrun_shared' -I'/usr/lib/ocaml' -lm -lpthread ** Cannot resolve symbols for /tmp/dyndll87882d.o: caml_abs_float caml_acos_float caml_acosh_float caml_add_float caml_alloc_dummy caml_alloc_dummy_float caml_alloc_dummy_function caml_alloc_dummy_infix caml_array_append caml_array_blit caml_array_concat caml_array_fill caml_array_get caml_array_get_addr caml_array_set caml_array_set_addr caml_array_sub caml_array_unsafe_get caml_array_unsafe_set caml_asin_float caml_asinh_float caml_atan2_float caml_atan_float caml_atanh_float caml_ba_blit caml_ba_change_layout caml_ba_create caml_ba_dim caml_ba_dim_1 caml_ba_dim_2 caml_ba_dim_3 caml_ba_fill caml_ba_get_1 caml_ba_get_2 caml_ba_get_3 caml_ba_get_generic caml_ba_kind caml_ba_layout caml_ba_num_dims caml_ba_reshape caml_ba_set_1 caml_ba_set_2 caml_ba_set_3 caml_ba_set_generic caml_ba_slice caml_ba_sub caml_ba_uint8_get16 caml_ba_uint8_get32 caml_ba_uint8_get64 caml_ba_uint8_set16 caml_ba_uint8_set32 caml_ba_uint8_set64 caml_backtrace_status caml_blit_bytes caml_blit_string caml_bswap16 caml_bytes_compare caml_bytes_equal caml_bytes_get caml_bytes_get16 caml_bytes_get32 caml_bytes_get64 caml_bytes_greaterequal caml_bytes_greaterthan caml_bytes_lessequal caml_bytes_lessthan caml_bytes_notequal caml_bytes_of_string caml_bytes_set caml_bytes_set16 caml_bytes_set32 caml_bytes_set64 caml_cbrt_float caml_ceil_float caml_channel_descriptor caml_classify_float caml_compare caml_convert_raw_backtrace caml_convert_raw_backtrace_slot caml_copysign_float caml_cos_float caml_cosh_float caml_create_bytes caml_create_string caml_div_float caml_dynlink_add_primitive caml_dynlink_close_lib caml_dynlink_get_current_libs caml_dynlink_lookup_symbol caml_dynlink_open_lib caml_ensure_stack_capacity caml_ephe_blit_data caml_ephe_blit_key caml_ephe_check_data caml_ephe_check_key caml_ephe_create caml_ephe_get_data caml_ephe_get_data_copy caml_ephe_get_key caml_ephe_get_key_copy caml_ephe_set_data caml_ephe_set_key caml_ephe_unset_data caml_ephe_unset_key caml_eq_float caml_equal caml_erf_float caml_erfc_float caml_eventlog_pause caml_eventlog_resume caml_exp2_float caml_exp_float caml_expm1_float caml_fill_bytes caml_fill_string caml_final_register caml_final_register_called_without_value caml_final_release caml_float_compare caml_float_of_int caml_float_of_string caml_floatarray_blit caml_floatarray_create caml_floatarray_get caml_floatarray_set caml_floatarray_unsafe_get caml_floatarray_unsafe_set caml_floor_float caml_fma_float caml_fmod_float caml_format_float caml_format_int caml_fresh_oo_id caml_frexp_float caml_gc_compaction caml_gc_counters caml_gc_full_major caml_gc_get caml_gc_huge_fallback_count caml_gc_major caml_gc_major_slice caml_gc_minor caml_gc_minor_words caml_gc_quick_stat caml_gc_set caml_gc_stat caml_ge_float caml_get_current_callstack caml_get_current_environment caml_get_exception_backtrace caml_get_exception_raw_backtrace caml_get_global_data caml_get_major_bucket caml_get_major_credit caml_get_minor_free caml_get_public_method caml_get_section_table caml_greaterequal caml_greaterthan caml_gt_float caml_hash caml_hexstring_of_float caml_hypot_float caml_input_value caml_input_value_from_bytes caml_install_signal_handler caml_int32_add caml_int32_and caml_int32_bits_of_float caml_int32_bswap caml_int32_compare caml_int32_div caml_int32_float_of_bits caml_int32_format caml_int32_mod caml_int32_mul caml_int32_neg caml_int32_of_float caml_int32_of_int caml_int32_of_string caml_int32_or caml_int32_shift_left caml_int32_shift_right caml_int32_shift_right_unsigned caml_int32_sub caml_int32_to_float caml_int32_to_int caml_int32_xor caml_int64_add caml_int64_add_native caml_int64_and caml_int64_and_native caml_int64_bits_of_float caml_int64_bswap caml_int64_compare caml_int64_div caml_int64_div_native caml_int64_float_of_bits caml_int64_format caml_int64_mod caml_int64_mod_native caml_int64_mul caml_int64_mul_native caml_int64_neg caml_int64_neg_native caml_int64_of_float caml_int64_of_int caml_int64_of_int32 caml_int64_of_nativeint caml_int64_of_string caml_int64_or caml_int64_or_native caml_int64_shift_left caml_int64_shift_right caml_int64_shift_right_unsigned caml_int64_sub caml_int64_sub_native caml_int64_to_float caml_int64_to_int caml_int64_to_int32 caml_int64_to_nativeint caml_int64_xor caml_int64_xor_native caml_int_as_pointer caml_int_compare caml_int_of_float caml_int_of_string caml_invoke_traced_function caml_lazy_make_forward caml_ldexp_float caml_le_float caml_lessequal caml_lessthan caml_lex_engine caml_log10_float caml_log1p_float caml_log2_float caml_log_float caml_lt_float caml_make_array caml_make_float_vect caml_make_vect caml_marshal_data_size caml_md5_chan caml_md5_string caml_memprof_start caml_memprof_stop caml_ml_bytes_length caml_ml_channel_size caml_ml_channel_size_64 caml_ml_close_channel caml_ml_debug_info_status caml_ml_enable_runtime_warnings caml_ml_flush caml_ml_input caml_ml_input_char caml_ml_input_int caml_ml_input_scan_line caml_ml_is_buffered caml_ml_open_descriptor_in caml_ml_open_descriptor_out caml_ml_out_channels_list caml_ml_output caml_ml_output_bytes caml_ml_output_char caml_ml_output_int caml_ml_pos_in caml_ml_pos_in_64 caml_ml_pos_out caml_ml_pos_out_64 caml_ml_runtime_warnings_enabled caml_ml_seek_in caml_ml_seek_in_64 caml_ml_seek_out caml_ml_seek_out_64 caml_ml_set_binary_mode caml_ml_set_buffered caml_ml_set_channel_name caml_ml_string_length caml_modf_float caml_mul_float caml_nativeint_add caml_nativeint_and caml_nativeint_bswap caml_nativeint_compare caml_nativeint_div caml_nativeint_format caml_nativeint_mod caml_nativeint_mul caml_nativeint_neg caml_nativeint_of_float caml_nativeint_of_int caml_nativeint_of_int32 caml_nativeint_of_string caml_nativeint_or caml_nativeint_shift_left caml_nativeint_shift_right caml_nativeint_shift_right_unsigned caml_nativeint_sub caml_nativeint_to_float caml_nativeint_to_int caml_nativeint_to_int32 caml_nativeint_xor caml_neg_float caml_neq_float caml_new_lex_engine caml_nextafter_float caml_notequal caml_obj_add_offset caml_obj_block caml_obj_dup caml_obj_make_forward caml_obj_raw_field caml_obj_reachable_words caml_obj_set_raw_field caml_obj_set_tag caml_obj_tag caml_obj_truncate caml_obj_with_tag caml_output_value caml_output_value_to_buffer caml_output_value_to_bytes caml_output_value_to_string caml_parse_engine caml_power_float caml_raw_backtrace_length caml_raw_backtrace_next_slot caml_raw_backtrace_slot caml_realloc_global caml_record_backtrace caml_register_named_value caml_reify_bytecode caml_reset_afl_instrumentation caml_restore_raw_backtrace caml_round_float caml_runtime_parameters caml_runtime_variant caml_set_oo_id caml_set_parser_trace caml_signbit caml_signbit_float caml_sin_float caml_sinh_float caml_sqrt_float caml_static_release_bytecode caml_string_compare caml_string_equal caml_string_get caml_string_get16 caml_string_get32 caml_string_get64 caml_string_greaterequal caml_string_greaterthan caml_string_lessequal caml_string_lessthan caml_string_notequal caml_string_of_bytes caml_string_set caml_sub_float caml_sys_argv caml_sys_chdir caml_sys_close caml_sys_const_backend_type caml_sys_const_big_endian caml_sys_const_int_size caml_sys_const_max_wosize caml_sys_const_naked_pointers_checked caml_sys_const_ostype_cygwin caml_sys_const_ostype_unix caml_sys_const_ostype_win32 caml_sys_const_word_size caml_sys_executable_name caml_sys_exit caml_sys_file_exists caml_sys_get_argv caml_sys_get_config caml_sys_getcwd caml_sys_getenv caml_sys_is_directory caml_sys_isatty caml_sys_mkdir caml_sys_modify_argv caml_sys_open caml_sys_random_seed caml_sys_read_directory caml_sys_remove caml_sys_rename caml_sys_rmdir caml_sys_system_command caml_sys_time caml_sys_time_include_children caml_sys_unsafe_getenv caml_tan_float caml_tanh_float caml_terminfo_rows caml_trunc_float caml_update_dummy caml_weak_blit caml_weak_check caml_weak_create caml_weak_get caml_weak_get_copy caml_weak_set File "hello.ml", line 1: Error: Error while building custom runtime system ^ permalink raw reply [flat|nested] 20+ messages in thread
* RE: [ITA] ocaml 4.14.0 2022-07-14 3:36 ` William Hu @ 2022-07-14 14:56 ` David Allsopp 2022-07-15 3:20 ` William Hu 0 siblings, 1 reply; 20+ messages in thread From: David Allsopp @ 2022-07-14 14:56 UTC (permalink / raw) To: William Hu; +Cc: Jon Turney, cygwin-apps William Hu wrote: > Hi David, > > > What were the missing symbols? With the OCaml 4.10 package, I hit > problems with this: > > > > echo 'print_endline "hello, world"' > hello.ml > > > > ocamlc -custom -runtime-variant _shared -o hello.exe hello.ml > > > > I think that may be an issue upstream (libasmrun_shared.so IIRC is > broken on all platforms - on Cygwin, you can just about to persuade it to > get to the same symbol errors because of the extra .dll.a file which gets > generated). > > It's a very long list of missing symbols (~400) so it's included as an > attachment in case the mailing list truncates extremely lengthy emails. > Also, just to note, the .dll.a file doesn't seem to be automatically > generated by upstream OCaml. I think this down to neglect - the PIC/shared versions of the runtime were contributed for a specific purpose and aren't properly maintained/tested AFAICT. I'm not sure that libcamlrun_shared can ever have worked on Cygwin, at least certainly not since OCaml 3.11 (which is a loooong time ago). The patch builds cygcamlrun_shared.dll as a plugin DLL - so the symbols will have been stripped and moved into symtbl (hence the huge number of missing symbols when linking against it when it gets passed to a normal linker). What normally happens with flexlink is that either an executable or a "main program DLL" (compiled with flexlink -maindll) would receive that symtbl from a DLL it flexdll_dlopen's and the DLL receives static_symtbl from the executable. That then means that the DLL can relocate any symbols it expected from the main executable and any other flexdll_dlopen'd DLLs. However, that's all meant to happen at runtime - I don't think flexlink has ever supported compiling an executable _itself_ which must flexdll_dlopen DLLs _before_ its main function. I think it's quite feasible to add that to flexlink, but it's not a small piece of work - in the meantime I'd suggest instead deleting the BYTECODE_SHARED_LIBRARIES += and NATIVE_SHARED_LIBRARIES += lines in runtime/Makefile instead of patching them. > > What's the full configuration command and what gets inferred for the > build, host and target triplets? fma should work without emulation in > Cygwin32 and it should be detecting as failing on Cygwin64 but the > emulation should be enabled by default unless you explicitly passed -- > disable-imprecise-c99-float-ops. > > Configuration command: > ./configure --prefix=/usr --enable-ocamltest > > If it's relevant, I'm compiling on a 64-bit machine with Cygwin32 > installed to compile the 32-bit version. Inferred build/host/target: > configure:2779: Configuring OCaml version 4.14.0 > configure:3007: checking build system type > configure:3021: result: i686-pc-cygwin > configure:3041: checking host system type > configure:3054: result: i686-pc-cygwin > configure:3074: checking target system type > configure:3087: result: i686-pc-cygwin > > On Cygwin64, the test does fail and emulate by default: > > configure:14872: result: no > configure:14896: WARNING: fma does not work; emulation enabled > > However, on Cygwin32, I get > > configure:14872: result: no > configure:14894: error: fma does not work, enable emulation with --enable- > imprecise-c99-float-ops > > config.log conveniently includes the program that fails, so I copy-pasted > some very redundant code (attached) and ran it on the different > architectures: > > Cygwin64: > t264| ans: 0x0p+0 accept: 0x1.0989687cp-1044 0x1.09df287cp-1044 0x1.0ap- > 1044 > t264| pass?: 0 > t265| ans: 0x0p+0 accept: 0x1.0988p-1060 0x1.09ep-1060 0x1.0ap-1060 > t265| pass?: 0 > t266| ans: 0x1p-1074 accept: 0x1p-1073 > t266| pass?: 0 > > Cygwin32: > t264| ans: 0x1.0ap-1044 accept: 0x1.0989687cp-1044 0x1.09df287cp-1044 > 0x1.0ap-1044 > t264| pass?: 1 > t265| ans: 0x1.0ap-1060 accept: 0x1.0988p-1060 0x1.09ep-1060 0x1.0ap- > 1060 > t265| pass?: 1 > t266| ans: 0x1p-1073 accept: 0x1p-1073 > t266| pass?: 1 > > The numbers look like they agree but configure doesn't think so for some > reason. Would you be able to send the entire config.log file (off-list is fine!). I'm not seeing this at all in Cygwin32 here! All best, David ^ permalink raw reply [flat|nested] 20+ messages in thread
* RE: [ITA] ocaml 4.14.0 2022-07-14 14:56 ` David Allsopp @ 2022-07-15 3:20 ` William Hu 0 siblings, 0 replies; 20+ messages in thread From: William Hu @ 2022-07-15 3:20 UTC (permalink / raw) To: David Allsopp; +Cc: Jon Turney, cygwin-apps Hi David, > I think this down to neglect - the PIC/shared versions of the runtime were contributed for a specific purpose and aren't properly maintained/tested AFAICT. > > I'm not sure that libcamlrun_shared can ever have worked on Cygwin, at least certainly not since OCaml 3.11 (which is a loooong time ago). The patch builds cygcamlrun_shared.dll as a plugin DLL - so the symbols will have been stripped and moved into symtbl (hence the huge number of missing symbols when linking against it when it gets passed to a normal linker). > > What normally happens with flexlink is that either an executable or a "main program DLL" (compiled with flexlink -maindll) would receive that symtbl from a DLL it flexdll_dlopen's and the DLL receives static_symtbl from the executable. That then means that the DLL can relocate any symbols it expected from the main executable and any other flexdll_dlopen'd DLLs. However, that's all meant to happen at runtime - I don't think flexlink has ever supported compiling an executable itself which must flexdll_dlopen DLLs before its main function. > > I think it's quite feasible to add that to flexlink, but it's not a small piece of work - in the meantime I'd suggest instead deleting the BYTECODE_SHARED_LIBRARIES += and NATIVE_SHARED_LIBRARIES += lines in runtime/Makefile instead of patching them. Duly noted. Thanks for the explanation! > > Would you be able to send the entire config.log file (off-list is fine!). I'm not seeing this at all in Cygwin32 here! > > All best, > > > David Config.log sent :) On another note, on x86_64, 16 of the testsuite tests are failing: tests/lib-scanf-2/'tscanf2_master.ml' with 1.1.1.1.1.1 (run) tests/lib-unix/common/'cloexec.ml' with 1.1.1.1.1.1.1 (run) tests/lib-systhreads/'testfork.ml' with 1.1.1.1 (bytecode) tests/tool-debugger/basic/'debuggee.ml' with 1.1.1.1.1.1.1 (check-program-output) tests/lib-unix/common/'process_pid.ml' with 1.1 (bytecode) tests/tool-debugger/dynlink/'host.ml' with 1.1.1.1.1.1.1.2.1 (check-program-output) tests/lib-unix/common/'pipe_eof.ml' with 1.1 (bytecode) tests/lib-unix/common/'wait_nohang.ml' with 1.1.1.1.1.1 (run) tests/tool-debugger/find-artifacts/'debuggee.ml' with 1.1.1.1.1.1.1.1.1.1 (check-program-output) tests/c-api/'alloc_async.ml' with 1 (native) tests/c-api/'alloc_async.ml' with 2 (bytecode) tests/lib-unix/common/'test_unix_cmdline.ml' with 1.1.1.1.1.1 (run) tests/lib-unix/common/'redirections.ml' with 1.1.1.1.1.1 (run) tests/tool-debugger/module_named_main/'main.ml' with 1.1.1.1.1.1.1 (check-program-output) tests/tool-debugger/no_debug_event/'noev.ml' with 1.1.1.1.1.1.1.1.1.1 (check-program-output) tests/tool-debugger/printer/'debuggee.ml' with 1.1.1.2.1.1.1 (check-program-output) Two are innocuous "unused variable" warnings, but the others are of this form: > Loading program... 0 [main] ocamlrun 40657 child_info_fork::abort: address space needed by 'dllunix.so' (0x400000) is already occupied > Unix error: 'fork' failed: Resource temporarily unavailable Github issues (e.g., https://github.com/ocaml/opam/issues/3785) have encountered this error before, but the issue seems to imply it's been resolved. Are these test failures expected/known (to be fair, 16 is a small number compared to 3000)? I can send the test log too if that helps. Thanks, William ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [ITA] ocaml 4.14.0 2022-07-13 15:41 ` David Allsopp 2022-07-14 3:36 ` William Hu @ 2022-07-16 14:22 ` Jon Turney 2022-07-23 16:38 ` William Hu 2022-08-23 20:00 ` David Allsopp 1 sibling, 2 replies; 20+ messages in thread From: Jon Turney @ 2022-07-16 14:22 UTC (permalink / raw) To: William Hu, David Allsopp, cygwin-apps On 13/07/2022 16:41, David Allsopp wrote: > >> 3) Interesting - on my machine, the camlheader[di] files had the .exe >> extensions. I did some digging around and found the files are *built* >> without the .exe suffix, and even *initially installed* without the .exe >> suffix, but ultimately come out with the .exe suffix. I ran cyport in >> debug mode and apparently the files are being renamed with the suffix >> post-install: >> >> + case "${exe##*/}" in >> + mv usr/lib/ocaml/camlheaderd usr/lib/ocaml/camlheaderd.exe >> + exe+=.exe >> >> and did a little more digging and I think these lines in cygport are the >> cause: >> https://github.com/cygwin/cygport/blob/096f27644bd3b28f29d7522e816bebd327c >> f24cb/lib/src_postinst.cygpart#L1010 Yeah, that seems plausible, but I'm not clear why we are seeing different behaviour... >> On the topic of "testing more thoroughly", I attempted to use >> ocamlc to compile a simple program and it fails with "Cannot find >> file camlheader" but works when I remove the ".exe", so it seems >> that the presence of the .exe suffixes breaks the compiler. Is >> there a way to prevent cygport from adding it? > > The camlheader files are data files and definitely mustn't be > installed with a .exe extension (nor do they need to be executable). I'm confused here: /usr/lib/ocaml/camlheaderd[di] look like executables (according to file etc.) If they genuinely aren't, then perhaps they shouldn't have execute permission (which is I think what is causing them to be caught by that piece of code in cygport...) ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [ITA] ocaml 4.14.0 2022-07-16 14:22 ` Jon Turney @ 2022-07-23 16:38 ` William Hu 2022-07-31 14:52 ` Jon Turney 2022-08-23 20:00 ` David Allsopp 1 sibling, 1 reply; 20+ messages in thread From: William Hu @ 2022-07-23 16:38 UTC (permalink / raw) To: Jon Turney; +Cc: David Allsopp, cygwin-apps > > Yeah, that seems plausible, but I'm not clear why we are seeing > different behaviour... > After a long period of poking around for differences, I think I found the error - I had the `noacl` option activated in /etc/fstab which was preventing chmod and executable bits from working properly. Removing noacl and rebuilding fixed the problem (no more exe suffixes!) More fixes: - The failing tests about address spaces were resolved when I upgraded to flexdll 0.39. - The failing tests about unused variables are patched - Shared runtime removed as per above As far as I know, I think this is everything resolved for 64-bit. The package passes all tests and runs on a few simple files when installed through an overlay. I've uploaded the 64-bit version as a test package. Thanks, William ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [ITA] ocaml 4.14.0 2022-07-23 16:38 ` William Hu @ 2022-07-31 14:52 ` Jon Turney 2022-08-07 2:26 ` William Hu 0 siblings, 1 reply; 20+ messages in thread From: Jon Turney @ 2022-07-31 14:52 UTC (permalink / raw) To: William Hu, cygwin-apps; +Cc: cygwin-apps On 23/07/2022 17:38, William Hu via Cygwin-apps wrote: >> >> Yeah, that seems plausible, but I'm not clear why we are seeing >> different behaviour... >> > > After a long period of poking around for differences, I think I found the error - I had the `noacl` option activated in /etc/fstab which was preventing chmod and executable bits from working properly. Removing noacl and rebuilding fixed the problem (no more exe suffixes!) > > More fixes: > - The failing tests about address spaces were resolved when I upgraded to flexdll 0.39. > - The failing tests about unused variables are patched > - Shared runtime removed as per above > > As far as I know, I think this is everything resolved for 64-bit. The package passes all tests and runs on a few simple files when installed through an overlay. I've uploaded the 64-bit version as a test package. > > Thanks, Thanks for working on this. Please accept this literally priceless gold star for adopting this package ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [ITA] ocaml 4.14.0 2022-07-31 14:52 ` Jon Turney @ 2022-08-07 2:26 ` William Hu 0 siblings, 0 replies; 20+ messages in thread From: William Hu @ 2022-08-07 2:26 UTC (permalink / raw) To: Jon Turney; +Cc: cygwin-apps Hi Jon, > > Thanks for working on this. > > Please accept this literally priceless gold star for adopting this package Thank you very much for the valuable and shiny award! I've also pushed the cygport and corresponding patches to the git repository. William ^ permalink raw reply [flat|nested] 20+ messages in thread
* RE: [ITA] ocaml 4.14.0 2022-07-16 14:22 ` Jon Turney 2022-07-23 16:38 ` William Hu @ 2022-08-23 20:00 ` David Allsopp 2022-08-24 9:20 ` Corinna Vinschen 1 sibling, 1 reply; 20+ messages in thread From: David Allsopp @ 2022-08-23 20:00 UTC (permalink / raw) To: Jon Turney, William Hu, cygwin-apps Jon Turney wrote: > On 13/07/2022 16:41, David Allsopp wrote: > > > >> 3) Interesting - on my machine, the camlheader[di] files had the .exe > >> extensions. I did some digging around and found the files are *built* > >> without the .exe suffix, and even *initially installed* without the > >> .exe suffix, but ultimately come out with the .exe suffix. I ran > >> cyport in debug mode and apparently the files are being renamed with > >> the suffix > >> post-install: > >> > >> + case "${exe##*/}" in > >> + mv usr/lib/ocaml/camlheaderd usr/lib/ocaml/camlheaderd.exe > >> + exe+=.exe > >> > >> and did a little more digging and I think these lines in cygport are > >> the > >> cause: > >> https://github.com/cygwin/cygport/blob/096f27644bd3b28f29d7522e816beb > >> d327c > >> f24cb/lib/src_postinst.cygpart#L1010 > > Yeah, that seems plausible, but I'm not clear why we are seeing different > behaviour... > > >> On the topic of "testing more thoroughly", I attempted to use ocamlc > >> to compile a simple program and it fails with "Cannot find file > >> camlheader" but works when I remove the ".exe", so it seems that the > >> presence of the .exe suffixes breaks the compiler. Is there a way to > >> prevent cygport from adding it? > > > > The camlheader files are data files and definitely mustn't be > > installed with a .exe extension (nor do they need to be executable). > > I'm confused here: /usr/lib/ocaml/camlheaderd[di] look like executables > (according to file etc.) > > If they genuinely aren't, then perhaps they shouldn't have execute > permission (which is I think what is causing them to be caught by that > piece of code in cygport...) ocamlc won't care about the executable bit, but these files are _data_ and so it will care if they end up with a .exe extension, because they are open'd not exec'd. The files themselves form the start of executables produced by ocamlc. For both Cygwin and native Windows, it's a tiny C program responsible for locating ocamlrun (on Unix, it's just a shebang line) and the bytecode itself gets appended. All best, David ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [ITA] ocaml 4.14.0 2022-08-23 20:00 ` David Allsopp @ 2022-08-24 9:20 ` Corinna Vinschen 2022-08-24 9:28 ` David Allsopp 0 siblings, 1 reply; 20+ messages in thread From: Corinna Vinschen @ 2022-08-24 9:20 UTC (permalink / raw) To: David Allsopp; +Cc: William Hu, cygwin-apps On Aug 23 20:00, David Allsopp wrote: > Jon Turney wrote: > > I'm confused here: /usr/lib/ocaml/camlheaderd[di] look like executables > > (according to file etc.) > > > > If they genuinely aren't, then perhaps they shouldn't have execute > > permission (which is I think what is causing them to be caught by that > > piece of code in cygport...) > > ocamlc won't care about the executable bit, but these files are _data_ > and so it will care if they end up with a .exe extension, because they > are open'd not exec'd. > > The files themselves form the start of executables produced by ocamlc. > For both Cygwin and native Windows, it's a tiny C program responsible > for locating ocamlrun (on Unix, it's just a shebang line) and the > bytecode itself gets appended. Why is ocaml for Cygwin not produing shebang files as well? After all, we're trying to be as Unix-compatible as possible. Corinna ^ permalink raw reply [flat|nested] 20+ messages in thread
* RE: [ITA] ocaml 4.14.0 2022-08-24 9:20 ` Corinna Vinschen @ 2022-08-24 9:28 ` David Allsopp 2022-08-24 9:28 ` David Allsopp 2022-08-24 10:04 ` Corinna Vinschen 0 siblings, 2 replies; 20+ messages in thread From: David Allsopp @ 2022-08-24 9:28 UTC (permalink / raw) To: cygwin-apps; +Cc: William Hu Corinna Vinschen wrote: > On Aug 23 20:00, David Allsopp wrote: > > Jon Turney wrote: > > > I'm confused here: /usr/lib/ocaml/camlheaderd[di] look like > > > executables (according to file etc.) > > > > > > If they genuinely aren't, then perhaps they shouldn't have execute > > > permission (which is I think what is causing them to be caught by > > > that piece of code in cygport...) > > > > ocamlc won't care about the executable bit, but these files are _data_ > > and so it will care if they end up with a .exe extension, because they > > are open'd not exec'd. > > > > The files themselves form the start of executables produced by ocamlc. > > For both Cygwin and native Windows, it's a tiny C program responsible > > for locating ocamlrun (on Unix, it's just a shebang line) and the > > bytecode itself gets appended. > > Why is ocaml for Cygwin not produing shebang files as well? After all, > we're trying to be as Unix-compatible as possible. I'm not 100% that this is the correct history, but I think it's down to being able to start the programs from outside a Cygwin bash prompt - i.e. the programs emitted want to have a .exe by default and it's strange to have ".exe" files with a shebang header (at least from outside Cygwin). This part of OCaml is actually old enough (late nineties) that this executable was also used on "real" Unix systems where shebang didn't work properly :) It is possible to configure Cygwin OCaml to use shebang headers (although at the moment only by changing Makefile.config after running configure) All best, David ^ permalink raw reply [flat|nested] 20+ messages in thread
* RE: [ITA] ocaml 4.14.0 2022-08-24 9:28 ` David Allsopp @ 2022-08-24 9:28 ` David Allsopp 2022-08-24 10:04 ` Corinna Vinschen 1 sibling, 0 replies; 20+ messages in thread From: David Allsopp @ 2022-08-24 9:28 UTC (permalink / raw) To: cygwin-apps Corinna Vinschen wrote: > On Aug 23 20:00, David Allsopp wrote: > > Jon Turney wrote: > > > I'm confused here: /usr/lib/ocaml/camlheaderd[di] look like > > > executables (according to file etc.) > > > > > > If they genuinely aren't, then perhaps they shouldn't have execute > > > permission (which is I think what is causing them to be caught by > > > that piece of code in cygport...) > > > > ocamlc won't care about the executable bit, but these files are _data_ > > and so it will care if they end up with a .exe extension, because they > > are open'd not exec'd. > > > > The files themselves form the start of executables produced by ocamlc. > > For both Cygwin and native Windows, it's a tiny C program responsible > > for locating ocamlrun (on Unix, it's just a shebang line) and the > > bytecode itself gets appended. > > Why is ocaml for Cygwin not produing shebang files as well? After all, > we're trying to be as Unix-compatible as possible. I'm not 100% that this is the correct history, but I think it's down to being able to start the programs from outside a Cygwin bash prompt - i.e. the programs emitted want to have a .exe by default and it's strange to have ".exe" files with a shebang header (at least from outside Cygwin). This part of OCaml is actually old enough (late nineties) that this executable was also used on "real" Unix systems where shebang didn't work properly :) It is possible to configure Cygwin OCaml to use shebang headers (although at the moment only by changing Makefile.config after running configure) All best, David ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [ITA] ocaml 4.14.0 2022-08-24 9:28 ` David Allsopp 2022-08-24 9:28 ` David Allsopp @ 2022-08-24 10:04 ` Corinna Vinschen 1 sibling, 0 replies; 20+ messages in thread From: Corinna Vinschen @ 2022-08-24 10:04 UTC (permalink / raw) To: David Allsopp; +Cc: cygwin-apps On Aug 24 09:28, David Allsopp wrote: > Corinna Vinschen wrote: > > On Aug 23 20:00, David Allsopp wrote: > > > Jon Turney wrote: > > > > I'm confused here: /usr/lib/ocaml/camlheaderd[di] look like > > > > executables (according to file etc.) > > > > > > > > If they genuinely aren't, then perhaps they shouldn't have execute > > > > permission (which is I think what is causing them to be caught by > > > > that piece of code in cygport...) > > > > > > ocamlc won't care about the executable bit, but these files are _data_ > > > and so it will care if they end up with a .exe extension, because they > > > are open'd not exec'd. > > > > > > The files themselves form the start of executables produced by ocamlc. > > > For both Cygwin and native Windows, it's a tiny C program responsible > > > for locating ocamlrun (on Unix, it's just a shebang line) and the > > > bytecode itself gets appended. > > > > Why is ocaml for Cygwin not produing shebang files as well? After all, > > we're trying to be as Unix-compatible as possible. > > I'm not 100% that this is the correct history, but I think it's down > to being able to start the programs from outside a Cygwin bash prompt > - i.e. the programs emitted want to have a .exe by default and it's > strange to have ".exe" files with a shebang header (at least from > outside Cygwin). > > This part of OCaml is actually old enough (late nineties) that this > executable was also used on "real" Unix systems where shebang didn't > work properly :) > > It is possible to configure Cygwin OCaml to use shebang headers > (although at the moment only by changing Makefile.config after running > configure) That would be nice, actually, together with dropping the .exe suffix, perhaps. Dunno about others, but I'd prefer to have ocaml scripts w/o exe prefix and working OOTB on other Unixoid systems in the first place. Thanks, Corinna ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [ITA] ocaml 4.14.0 2022-07-13 2:56 ` William Hu 2022-07-13 15:41 ` David Allsopp @ 2022-07-16 14:05 ` Jon Turney 2022-07-17 20:56 ` William Hu 1 sibling, 1 reply; 20+ messages in thread From: Jon Turney @ 2022-07-16 14:05 UTC (permalink / raw) To: William Hu, cygwin-apps On 13/07/2022 03:56, William Hu via Cygwin-apps wrote: > Apologies, meant to click reply-all. > > Hi Jon, > > Thanks for all of the detailed feedback - I'll test the package more > thoroughly next time. I added 'ocaml' to your authorized packages. Please go ahead and upload (perhaps as a test release?) when you are ready. Please see [1] for how to upload packages and push to the packaging git repository. [1] https://cygwin.com/packages.html Thanks. ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [ITA] ocaml 4.14.0 2022-07-16 14:05 ` Jon Turney @ 2022-07-17 20:56 ` William Hu 0 siblings, 0 replies; 20+ messages in thread From: William Hu @ 2022-07-17 20:56 UTC (permalink / raw) To: Jon Turney; +Cc: cygwin-apps > I added 'ocaml' to your authorized packages. > > Please go ahead and upload (perhaps as a test release?) when you are ready. > > Please see [1] for how to upload packages and push to the packaging git > repository. > > [1] https://cygwin.com/packages.html > Great, thank you so much for the help and guidance! Once those last few bumps are smoothed out, I'll upload it as a test release. William ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2022-08-24 10:04 UTC | newest] Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-07-04 2:03 [ITA] ocaml 4.14.0 William Hu 2022-07-04 17:03 ` Jon Turney 2022-07-05 0:42 ` William Hu 2022-07-05 19:44 ` Jon Turney 2022-07-13 2:56 ` William Hu 2022-07-13 15:41 ` David Allsopp 2022-07-14 3:36 ` William Hu 2022-07-14 14:56 ` David Allsopp 2022-07-15 3:20 ` William Hu 2022-07-16 14:22 ` Jon Turney 2022-07-23 16:38 ` William Hu 2022-07-31 14:52 ` Jon Turney 2022-08-07 2:26 ` William Hu 2022-08-23 20:00 ` David Allsopp 2022-08-24 9:20 ` Corinna Vinschen 2022-08-24 9:28 ` David Allsopp 2022-08-24 9:28 ` David Allsopp 2022-08-24 10:04 ` Corinna Vinschen 2022-07-16 14:05 ` Jon Turney 2022-07-17 20:56 ` William Hu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).