Giter Club home page Giter Club logo

oasis2opam's Introduction

⚠️ CAUTION

The developer team released OCaml 5.0.0 in December 2022. This release sports a full rewrite of its runtime system for shared-memory parallel programming using domains and native support for concurrent programming using effect handlers.

Owing to the large number of changes, the initial 5.0 release is more experimental than usual. It is recommended that all users wanting a stable release use the 4.14 release which will continue to be supported and updated while 5.x reaches feature and stability parity. Similarly, if you need one of the ports not yet supported in the 5.0 release you must use the 4.14 release.

The initial release of OCaml 5.0 only supports the native compiler under ARM64 and x86-64 architectures under Linux, macOS and the BSDs. On Windows, only the MinGW-w64 port is supported in OCaml 5.0 and the Cygwin port is restored in 5.1. On Linux, native code support for RISC-V and s390x/IBM Z is available in OCaml 5.1 and in 5.2 for Power.

❗ From OCaml 5.0 onwards, native compilation is available only on 64-bit systems. Native compilation on 32-bit systems is no longer available, nor are there plans to bring it back. The bytecode compiler will continue to work on all architectures.

Branch trunk Branch 5.2 Branch 5.1 Branch 5.0 Branch 4.14

Github CI Build Status (trunk branch) Github CI Hygiene Status (trunk branch) AppVeyor Build Status (trunk branch)

Github CI Build Status (5.2 branch) AppVeyor Build Status (5.2 branch)

Github CI Build Status (5.1 branch) AppVeyor Build Status (5.1 branch)

Github CI Build Status (5.0 branch) AppVeyor Build Status (5.0 branch)

Github CI Build Status (4.14 branch) AppVeyor Build Status (4.14 branch)

README

Overview

OCaml is a functional, statically-typed programming language from the ML family, offering a powerful module system extending that of Standard ML and a feature-rich, class-based object system.

OCaml comprises two compilers. One generates bytecode which is then interpreted by a C program. This compiler runs quickly, generates compact code with moderate memory requirements, and is portable to many 32 or 64 bit platforms. Performance of generated programs is quite good for a bytecoded implementation. This compiler can be used either as a standalone, batch-oriented compiler that produces standalone programs, or as an interactive REPL system.

The other compiler generates high-performance native code for a number of processors. Compilation takes longer and generates bigger code, but the generated programs deliver excellent performance, while retaining the moderate memory requirements of the bytecode compiler. The native-code compiler currently runs on the following platforms:

Tier 1 (actively maintained) Tier 2 (maintained when possible)

x86 64 bits

Linux, macOS, Windows, FreeBSD

NetBSD, OpenBSD, OmniOS (Solaris)

ARM 64 bits

Linux, macOS

FreeBSD, OpenBSD, NetBSD

Power 64 bits

Linux (little-endian, ABIv2)

Linux (big-endian, ABIv2)

RISC-V 64 bits

Linux

IBM Z (s390x)

Linux

Other operating systems for the processors above have not been tested, but the compiler may work under other operating systems with little work.

All files marked "Copyright INRIA" in this distribution are Copyright © 1996-2023 Institut National de Recherche en Informatique et en Automatique (INRIA) and distributed under the conditions stated in file LICENSE.

Installation

See the file INSTALL.adoc for installation instructions on machines running Unix, Linux, macOS, WSL and Cygwin. For native Microsoft Windows, see README.win32.adoc.

Documentation

The OCaml manual is distributed in HTML, PDF, and Emacs Info files. It is available at

Availability

The complete OCaml distribution can be accessed at

Keeping in Touch with the Caml Community

There is an active and friendly discussion forum at

The OCaml mailing list is the longest-running forum for OCaml users. You can email it at

You can subscribe and access list archives via the Web interface at

There also exist other mailing lists, chat channels, and various other forums around the internet for getting in touch with the OCaml and ML family language community. These can be accessed at

In particular, the IRC channel #ocaml on Libera has a long history and welcomes questions.

Bug Reports and User Feedback

Please report bugs using the issue tracker at https://github.com/ocaml/ocaml/issues

To be effective, bug reports should include a complete program (preferably small) that exhibits the unexpected behavior, and the configuration you are using (machine type, etc).

For information on contributing to OCaml, see HACKING.adoc and CONTRIBUTING.md.

Separately maintained components

Some libraries and tools which used to be part of the OCaml distribution are now maintained separately and distributed as OPAM packages. Please use the issue trackers at their respective new homes:

Library Removed since OPAM package

The Stream and Genlex standard library modules

OCaml 5.0

camlp-streams

The Graphics library

OCaml 4.09

graphics

The Num library

OCaml 4.06

num

The OCamlbuild tool

OCaml 4.03

ocamlbuild

The camlp4 tool

OCaml 4.02

camlp4

The LablTk library

OCaml 4.02

labltk

The CamlDBM library

OCaml 4.00

dbm

The OCamlWinTop Windows toplevel

OCaml 4.00

none

oasis2opam's People

Contributors

chris00 avatar edwintorok avatar gildor478 avatar hcarty avatar mmottl avatar seliopou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

oasis2opam's Issues

depopts support

Running oasis2opam on debian-formats generates this version constraint which is not satisfiable on OCaml 4.01+: ("mikmatch" {= "1.0.6"} | "mikmatch" {= "1.0.5"})

However the original _oasis file didn't have a version constraint, apparently this is because versions higher than 1.0.6 of mikmatch have pcre as a depopts, so I think that oasis2opam should in this case generate this: "mikmatch" "pcre"

$ oasis2opam --query mikmatch_pcre
"mikmatch_pcre" is provided by: ("mikmatch" {= "1.0.6"} | "mikmatch" {= "1.0.5"})
$ opam install mikmatch.1.0.6
[ERROR] mikmatch.1.0.6 is not available because it requires OCaml >= 4.00 & < 4.01.
$ opam install mikmatch.1.0.5
[ERROR] mikmatch.1.0.5 is not available because it requires OCaml < 4.01.
$ opam info mikmatch
             package: mikmatch
             version: 1.0.8
          repository: default
        upstream-url: https://github.com/mjambon/mikmatch/archive/v1.0.8.tar.gz
       upstream-kind: http
   upstream-checksum: 0f3b272491bff4fe842948dbf71d022e
            homepage: http://mjambon.com/micmatch.html
                 doc: http://mjambon.com/mikmatch-manual.html
             depends: ocamlfind & camlp4 & tophide >= 1.0.2
             depopts: pcre
   installed-version: 1.0.8 [system 4.02.1 4.02.0+trunk]
  available-versions: 1.0.5, 1.0.6, 1.0.7, 1.0.8
         description: OCaml syntax extension for regexps

Workaround:

oasis2opam --local
sed -i -e 's/("mikmatch".*/("mikmatch" "pcre")/' opam/opam

Dependency Generation Does Not Include Executables?

It seems that, if a BuildDepends entry appears in an Executable but not in a Library, it is not included in the opam file. For instance, my project includes a single library with the following BuildDepends:

  BuildDepends:
    batteries,
    monadlib,
    ocaml-monadic,
    ppx_deriving.std (>= 2.0),
    yojson

It has a single executable with this BuildDepends:

  BuildDepends:
    batteries,
    jhupllib,
    oUnit,
    ppx_deriving.std (>= 2.0),
    ppx_deriving_yojson

The resulting opam file contains this depends entry:

depends: [
  "base-threads"
  "batteries"
  "monadlib"
  "oasis" {build & >= "0.4.7"}
  "ocaml-monadic"
  "ocamlbuild" {build}
  "ocamlfind" {build}
  "ounit" {build}
  "ppx_deriving" {>= "2.0"}
  "yojson"
]

As a result, the OPAM package fails to install unless the user has already manually installed ppx_deriving_yojson. Am I misunderstanding the function of these fields? Is this an oversight?

The above project can be found here. Steps to reproduce:

mkdir -p ztemp
cd ztemp
export OPAMROOT="$(pwd)/opam"
mkdir -p $OPAMROOT
opam init
eval `opam config env`
git clone https://github.com/JHU-PL-Lab/jhu-pl-lib.git
cd jhu-pl-lib
git checkout c901c56ea93640e5aaa0232e6b05000e5f87120b
opam pin add jhupllib .

The last command will fail with an error message something like this:

#=== ERROR while installing jhupllib.0.1+dev ==================================#
# opam-version 1.2.2
# os           linux
# command      ocaml setup.ml -configure --prefix /home/zpalmer/ztemp/opam/4.04.1
# path         /home/zpalmer/ztemp/opam/4.04.1/build/jhupllib.0.1+dev
# compiler     4.04.1
# exit-code    1
# env-file     /home/zpalmer/ztemp/opam/4.04.1/build/jhupllib.0.1+dev/jhupllib-4107-aaa640.env
# stdout-file  /home/zpalmer/ztemp/opam/4.04.1/build/jhupllib.0.1+dev/jhupllib-4107-aaa640.out
# stderr-file  /home/zpalmer/ztemp/opam/4.04.1/build/jhupllib.0.1+dev/jhupllib-4107-aaa640.err
### stderr ###
# ocamlfind: Package `ppx_deriving_yojson' not found

Please let me know if I can provide additional information. Thank you for the tool!

Strange dependency for ocamlbuild

When trying to generate an OPAM package for OASIS itself, I got a very ocamlbuild dependency:

$ oasis2opam --query ocamlbuild
"ocamlbuild" is provided by: ("ocamlbuild" {= "0.9.3"} | "ocamlbuild" {= "0.9.2"} | "ocamlbuild" {= "0.9.1"} | "ocamlbuild" {= "0.9.0"} | "ocamlbuild" {= "0"})

@Chris00 why the package doesn't simply depend on ocamlbuild?

Failure to compile against 0.4.2

After an opam update && opam upgrade this morning it looks like there is a change in oasis which breaks oasis2opam. The opam output is pasted below.

===== ERROR while recompiling oasis2opam.0.3.6 =====
# opam-version 1.1.1
# os           linux
# command      ocaml setup.ml -build
# path         /home/hcarty/.opam/4.01.0/build/oasis2opam.0.3.6
# compiler     4.01.0
# exit-code    1
# env-file     /home/hcarty/.opam/4.01.0/build/oasis2opam.0.3.6/oasis2opam-7428-ad6566.env
# stdout-file  /home/hcarty/.opam/4.01.0/build/oasis2opam.0.3.6/oasis2opam-7428-ad6566.out
# stderr-file  /home/hcarty/.opam/4.01.0/build/oasis2opam.0.3.6/oasis2opam-7428-ad6566.err
### stdout ###
# ...[truncated]
# /home/hcarty/.opam/4.01.0/bin/ocamlfind ocamlc -c -g -annot -package oasis -package str -package unix -I src -o src/BuildDepends.cmo src/BuildDepends.ml
# /home/hcarty/.opam/4.01.0/bin/ocamlfind ocamlc -c -g -annot -package oasis -package str -package unix -I src -o src/oasis2opam.cmo src/oasis2opam.ml
# + /home/hcarty/.opam/4.01.0/bin/ocamlfind ocamlc -c -g -annot -package oasis -package str -package unix -I src -o src/oasis2opam.cmo src/oasis2opam.ml
# File "src/oasis2opam.ml", line 83, characters 22-467:
# Warning 8: this pattern-matching is not exhaustive.
# Here is an example of a value that is not matched:
# Object (_, _, _)
# File "src/oasis2opam.ml", line 237, characters 32-49:
# Error: Unbound value OASISContext.args
# Command exited with code 2.
### stderr ###
# fatal: Not a git repository (or any of the parent directories): .git
# fatal: Not a git repository (or any of the parent directories): .git
# E: Failure("Command ''/home/hcarty/.opam/4.01.0/bin/ocamlbuild' src/oasis2opam.native -tag debug' terminated with error code 10")

.install file should contain more than just bins section

opam lint warns that there is no remove field when _oasis only builds an executable:
warning 27: No field 'remove' while a field 'install' is present, uncomplete uninstallation suspected

I thought that in this case the install field could be removed too and just rely on the generated .install file, however that file only contains the bin section.
For example for this _oasis file oasis2opam --local doesn't generate the sbin,etc or doc sections in the .install file:

-sbin: [
-  "libres3/_build/src/server/libres3_setup.native" {"libres3_setup"}
-  "libres3/_build/src/server/libres3_report.native" {"libres3_report"}
-  "libres3/_build/src/ocsigen/libres3_ocsigen.native" {"libres3_ocsigen"}
-  "libres3/src/files/sbin/libres3_certgen"
-  "libres3/src/files/sbin/libres3"
-  "libres3/src/files/sbin/libres3_env.sh"
-]
-etc: [
-  "libres3/src/files/conf/libres3.sample.s3cfg"
-  "libres3/src/files/conf/libres3-insecure.sample.s3cfg"
-  "libres3/src/files/conf/mime.types"
-]
-doc: [
-  "libres3/README"
-  "libres3/src/files/s3genlink.py"
-  "libres3/doc/manual/manual.pdf"
+bin: [
+  "?_build/src/server/libres3_report.byte" {"libres3_report"}
+  "?_build/src/server/libres3_report.native" {"libres3_report"}
+  "?_build/src/server/libres3_setup.byte" {"libres3_setup"}
+  "?_build/src/server/libres3_setup.native" {"libres3_setup"}
+  "?_build/src/ocsigen/libres3_ocsigen.byte" {"libres3_ocsigen"}
+  "?_build/src/ocsigen/libres3_ocsigen.native" {"libres3_ocsigen"}

_oasis_remove_.ml and OASIS version of setup.ml

Pre-emptive bug, I don't yet have the issue.

I see in commit 77b07e3, that you have removed the generation of oasis_remove.ml (which is a good thing).

The problem is that '-C' is only fixed with OASIS 0.4.7 and you may have a setup.ml generated with former version (e.g. 0.4.6).

Can you check the version of OASIS used to generate setup.ml and issue an error if < 0.4.7 ?

To check the version

$ ocaml setup.ml -version

oUnit generated as depopt but it is not optional

Related to #14, running oasis2opam on debian-formats generates a depopts on oUnit, but the _oasis file doesn't contain a flag to disable building the tests, so it should be a regular dependency, otherwise opam install fails:

Executable test
  Path:       test
  MainIs:     test.ml
  Install:    false
  BuildDepends: debian-formats, oUnit

Workaround: manually move ounit from depopts to depends.

depends field

Just a very minor comment:

For the depends field, I quite like to have one dependency per line (it makes clearer to which package the version contraints, if any, belongs to). Would it be possible to change that ?

Transform oasis2opam into an OASIS command plugin of OASIS

oasis2opam is tightly linked to OASIS and we should make sure it is always in sync with oasis. One way to achieve that, is to make it a plugin of OASIS. In this case we will be sure that the parsing of _oasis files is up to date.

I have been hit by this bug a few time, because oasis2opam was using an old parser from OASIS that didn't handled some special features (like AlphaFeatures and BetaFeatures introduced recently).

depopts are not quoted in master

While testing #22 I came across a bug where depopts are no longer being quoted. Where as previously they would be generated like this:

depopts: [
  "js_of_ocaml"
]

they are now being generated like this:

depopts: [
  js_of_ocaml
]

513bdbe seems to be the culprit.

Alpha feature supported ?

When I use the tools with an archive containing the following _oasis file, I
get :

Fatal error: exception Failure("Feature stdfiles_markdown doesn't exist.")

The _oasis file :

OASISFormat: 0.4
Name:        OcLaunch
Version:     0.1.2
Synopsis:    Launch commands automatically
Authors:     Joly Clément <[email protected]>
Maintainers: Joly Clément <[email protected]>
License:     CeCILL
LicenseFile: LICENSE
Copyrights: (C) 2014 Joly Clément
Homepage: http://www.oclaunch.tuxfamily.org
BuildTools: ocamlbuild, camlp4o
Plugins: StdFiles (0.4), DevFiles (0.4)
XStdFilesREADME: true
XStdFilesINSTALL: true
XStdFilesAUTHORS: true
AlphaFeatures: stdfiles_markdown, compiled_setup_ml
Description: OcLaunch is a command-line tool to launch successively (each time the program is called) commands. It is designed to be used with any program, interactive or not. This a early version. Feedback is welcomed at [email protected].

PreBuildCommand: atdgen -t ./src/settings.atd
PreBuildCommand: atdgen -j ./src/settings.atd
PreBuildCommand: atdgen -v ./src/settings.atd

Executable oclaunch
  Path:       src
  MainIs:     oclaunch.ml
  BuildDepends: core, yojson, atdgen, threads, core_extended
  CompiledObject: byte

The _oasis file is of course working with oasis

Please fix 'oasis setup'

Latest version fails to install from OPAM, apparently due to regenerating the setup.ml file:

$ cat /home/edwin/.opam/4.00.1/build/oasis2opam.0.3.3/oasis2opam-10604-865888.err
File "setup.ml", line 1:
Error: Reference to undefined global `Unix'

If I clone this upstream repository everything works fine, unless I run 'oasis setup', which then fails the same as above due to the use of 'Unix.gettimeofday' in setup.ml.
Would it be possible to move this to myocamlbuild.ml where the Unix (well Ocamlbuild_pack.My_unix) module is available?

Where does <pkg>.install belongs?

Forking the discussion on #29

For .install, the OPAM manual indeed [talks about that file] (https://opam.ocaml.org/doc/Manual.html#packagenameinstall) without expressing a clear preference. A discussion — somewhere on Github I think — made clear however that <pkg>.install files are not welcome in the opam-repository in order not to "pollute" everybody with extra files that may not be useful for them.

Not sure to understand where the .install should be ?

  1. in the upstream source?
    I don't see the use of it in there. Except for OPAM, it won't be useful (hence polluting the source).
  2. in the OPAM repository?
    I thought it was a good option. If you can point me to the right place for the mentioned discussion. that would be nice.

"local" mode

It would be nice to have a "local" mode that output only an opam file, given an _oasis one (no need for a tarball, etc). This would especially fit the new opam feature where you can pin an unknown package, as long as there is an opam file a the root of the project.

Not sure if this is oasis2opam fault but reproducible error

I used oasis2opam for my usbmux project but stumbled on this bug at the worst moment, when a user had reported it when I was debugging a different issue with them!

$ opam pin add usbmux https://github.com/fxfactorial/ocaml-usbmux -y

and it blows up with:

[usbmux] https://github.com/fxfactorial/ocaml-usbmux downloaded

usbmux needs to be installed.
The following actions will be performed:
∗ install usbmux 1.3.1*

=-=- Gathering sources =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[usbmux.1.3.1] https://github.com/fxfactorial/ocaml-usbmux downloaded

=-=- Processing actions -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[ERROR] The compilation of usbmux failed at "oasis setup".
Processing 1/1: [usbmux: ocaml]
#=== ERROR while installing usbmux.1.3.1 ======================================#

full thread here:
onlinemediagroup/ocaml-usbmux#6 (comment)

I'm not sure if this is opam's fault, oasis's fault or oasis2opam.

Allow the use of 'SourceRepository opam-pin'

Right now oasis2opam uses whatever source repository is available, like this one:

SourceRepository head
  Type: git
  Location: git://github.com/ocaml/oasis.git
  Browser: https://github.com/ocaml/oasis

I think it would be better to differentiate between head and opam-pin, by introducing another source repository with a different name:

SourceRepository opam-pin
  Type: git
  Location: git://github.com/ocaml/oasis.git
  Branch: opam/testing

If not defined, we can fallback to the default behavior.

Oasis version constraint.

oasis2opam generated the following dependency :

 ("oasis" {>= "0.4.4"} | "oasis" {= "0.4.3"} | "oasis" {= "0.4.2"} | "oasis" {= "0.4.1"} | "oasis" {= "0.4.0"} | "oasis" {= "0.3.0"} | "oasis-mirage")

However, I have in my _oasis file :

OASISFormat: 0.4

oasis 0.3.0 shouldn't be present.

opam lint complaints

opam lint complains about several issues on files generated by oasis2opam. E.g. with Lacaml:

Validation failed for ~/archive/github/mmottl/forked/opam-repository/packages/lacaml/lacaml.7.2.1/opam:
  - Field 'ocaml-version' is deprecated, use 'available' instead
  - Missing field 'bug-reports'
  - Package declares 'depexts', but has no 'post-messages' to help the user out when they are missing

Missing features

If I have in my _oasis

AlphaFeatures: ocamlbuild_more_args

oasis2opam errors with :

Fatal error: exception Failure("Feature ocamlbuild_more_args doesn't exist.")

Check the format of the dev-repo field

The SourceRepository is pretty generic and Camelus enforces a stricter check:

error 42: The 'dev-repo' field doesn't specify an explicit VCS. You may use
URLs of the form "git+https://" or a ".hg" or ".git" suffix

It would be nice to have this check earlier in the process.

Default flag value and depopt/test

See ocaml/opam-repository#8031

I have the following in my _oasis:

Flag quickstart_tests                                                           
  Description: Build test-quickstart                                            
  Default: true   

[...]

Executable "test-quickstart"                                                    
  Path: test/test-quickstart                                                    
  MainIs: TestQuickstart.ml                                                     
  Install: false                                                                
  CompiledObject: best                                                          
  Build$: flag(tests) && flag(quickstart_tests)                                 
  BuildDepends: oUnit (>= 2.0.0), findlib, fileutils (>= 0.4.2),                
                expect.pcre (>= 0.0.4), oasis, oasis.builtin-plugins,           
                test-common 

The generated opam:

build-test: [
  ["ocaml" "setup.ml" "-configure" "--enable-tests"]
  ["ocaml" "setup.ml" "-build"]
  ["ocaml" "setup.ml" "-test"]
]
build-doc: [ "ocaml" "setup.ml" "-doc" ]
depends: [
  "base-unix"
  "camlp4" {test}
  "fileutils" {test & >= "0.4.2"}
  "ocamlbuild"
  "ocamlfind" {>= "1.3.1"}
  "ocamlify" {build}
  "ocamlmod" {build}
  "omake" {test}
  "ounit" {test & >= "2.0.0"}
  "pcre" {test}
]
depopts: [
  "benchmark"
  "expect"
]
conflicts: [
  "benchmark" {< "1.2"}
  "expect" {< "0.0.4"}
  "oasis-mirage" {= "0.3.0"}
  "oasis-mirage" {= "0.3.0a"}
]

And the following error when building:

# ocamlfind: Package `expect.pcre' not found
# W: Field 'pkg_expect_pcre' is not set: Command ''/home/travis/.opam/4.03.0/bin/ocamlfind' query -format %d expect.pcre > '/tmp/oasis-402383.txt'' terminated with error code 2
# E: Cannot find findlib package expect.pcre (>= 0.0.4)
# E: Failure("1 configuration error")

What I expect is to have either:

  • build-test to disable quickstart-tests:
build-test: [
  ["ocaml" "setup.ml" "-configure" "--enable-tests" "--disable-quickstart-tests"]
  ["ocaml" "setup.ml" "-build"]
  ["ocaml" "setup.ml" "-test"]
]
  • OR take into account default value of the flag and update depends/depopts/conflicts accordingly:
depends: [
  "base-unix"
  "camlp4" {test}
  "fileutils" {test & >= "0.4.2"}
  "ocamlbuild"
  "ocamlfind" {>= "1.3.1"}
  "ocamlify" {build}
  "ocamlmod" {build}
  "omake" {test}
  "ounit" {test & >= "2.0.0"}
  "pcre" {test}
  "expect" {test & >= "0.0.4"}
]
depopts: [
  "benchmark"
]
conflicts: [
  "benchmark" {< "1.2"}
  "oasis-mirage" {= "0.3.0"}
  "oasis-mirage" {= "0.3.0a"}
]

Don't encourage distribution of repetitive removal files in opam metadata

package.install:

etc: [
  "setup.ml"
  "setup.data"
  "setup.log"
  "_oasis_remove_.ml"
]

and

_oasis_remove_.ml:

open Printf

let () =
  let dir = Sys.argv.(1) in
  (try Sys.chdir dir
   with _ -> eprintf "Cannot change directory to %s\n%!" dir);
  exit (Sys.command "ocaml setup.ml -uninstall")

get added to every version of every package that uses this tool and are distributed to every user of opam even if they don't use those packages. They are always the same. They increase bandwidth and storage costs with very little benefit. They belong in the build system of the package. They make opam package analysis harder because the package is no longer self-contained.

Perhaps the solution is to upstream oasis changes so setup.ml can change its own directory?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.