Navigation Menu

Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Freebsd port #13

Merged
merged 8 commits into from Sep 27, 2011
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 8 additions & 2 deletions Makefile
Expand Up @@ -10,6 +10,8 @@
include config.make include config.make


INSTALL ?= cp -u -L INSTALL ?= cp -u -L
MAKE ?= $_
export MAKE


ifndef NO_REBUILD_OPA_PACKAGES ifndef NO_REBUILD_OPA_PACKAGES
OPAOPT += "--rebuild" OPAOPT += "--rebuild"
Expand Down Expand Up @@ -152,7 +154,9 @@ uninstall:
# Install our ocamlbuild-generation engine # Install our ocamlbuild-generation engine
install-bld: install-bld:
@mkdir -p $(INSTALL_DIR)/bin @mkdir -p $(INSTALL_DIR)/bin
@echo "#!/bin/bash -ue" > $(INSTALL_DIR)/bin/bld @echo "#!/usr/bin/env bash" > $(INSTALL_DIR)/bin/bld
@echo "set -e" >> $(INSTALL_DIR)/bin/bld
@echo "set -u" >> $(INSTALL_DIR)/bin/bld
@chmod 755 $(INSTALL_DIR)/bin/bld @chmod 755 $(INSTALL_DIR)/bin/bld
@echo "BLDDIR=$(PREFIX)/share/opa/bld $(PREFIX)/share/opa/bld/gen_myocamlbuild.sh" >> $(INSTALL_DIR)/bin/bld @echo "BLDDIR=$(PREFIX)/share/opa/bld $(PREFIX)/share/opa/bld/gen_myocamlbuild.sh" >> $(INSTALL_DIR)/bin/bld
@echo "_build/myocamlbuild -no-plugin -j 6 \"\$$@\"" >> $(INSTALL_DIR)/bin/bld @echo "_build/myocamlbuild -no-plugin -j 6 \"\$$@\"" >> $(INSTALL_DIR)/bin/bld
Expand All @@ -164,7 +168,9 @@ install-bld:
install-qmlflat: # depends on opabsl_for_compiler, but we don't want to run ocamlbuild twice install-qmlflat: # depends on opabsl_for_compiler, but we don't want to run ocamlbuild twice
@mkdir -p $(INSTALL_DIR)/bin $(INSTALL_DIR)/share/opa/mlstatebsl @mkdir -p $(INSTALL_DIR)/bin $(INSTALL_DIR)/share/opa/mlstatebsl
@$(INSTALL) $(BUILD_DIR)/opabsl/mlstatebsl/opabslgen_*.opa $(INSTALL_DIR)/share/opa/mlstatebsl @$(INSTALL) $(BUILD_DIR)/opabsl/mlstatebsl/opabslgen_*.opa $(INSTALL_DIR)/share/opa/mlstatebsl
@echo "#!/bin/bash -ue" > $(INSTALL_DIR)/bin/qmlflat @echo "#!/usr/bin/env bash" > $(INSTALL_DIR)/bin/qmlflat
@echo "set -e" >> $(INSTALL_DIR)/bin/qmlflat
@echo "set -u" >> $(INSTALL_DIR)/bin/qmlflat
@chmod 755 $(INSTALL_DIR)/bin/qmlflat @chmod 755 $(INSTALL_DIR)/bin/qmlflat
@echo 'exec opa --no-stdlib --no-server --no-cps --no-closure --no-ei --no-constant-sharing --no-undot --separated off --value-restriction disabled --no-warn duplicateL0 --no-warn typer.warncoerce --no-warn unused --no-discard-of-unused-stdlib --no-warn pattern $$(if ! grep -qE "(^| )--no-stdlib( |$$)" <<<"$$*"; then echo $(shell sed "s%^[^# ]\+%$(PREFIX)/share/opa/mlstatebsl/opabslgen_&%; t OK; d; :OK" opabsl/mlstatebsl/bsl-sources); fi) "$$@"' \ @echo 'exec opa --no-stdlib --no-server --no-cps --no-closure --no-ei --no-constant-sharing --no-undot --separated off --value-restriction disabled --no-warn duplicateL0 --no-warn typer.warncoerce --no-warn unused --no-discard-of-unused-stdlib --no-warn pattern $$(if ! grep -qE "(^| )--no-stdlib( |$$)" <<<"$$*"; then echo $(shell sed "s%^[^# ]\+%$(PREFIX)/share/opa/mlstatebsl/opabslgen_&%; t OK; d; :OK" opabsl/mlstatebsl/bsl-sources); fi) "$$@"' \
>> $(INSTALL_DIR)/bin/qmlflat >> $(INSTALL_DIR)/bin/qmlflat
Expand Down
2 changes: 1 addition & 1 deletion README
Expand Up @@ -21,7 +21,7 @@ $ sudo make install


should get you there. ./configure should report any missing dependencies and should get you there. ./configure should report any missing dependencies and
point you to the packages you may install to fix them (although those may depend point you to the packages you may install to fix them (although those may depend
on your distribution). on your distribution). make needs to be GNU make.


The main dependency of OPA is OCaml 3.12. In case your distribution doesn't The main dependency of OPA is OCaml 3.12. In case your distribution doesn't
provide a recent enough version, or if you miss some other dependencies, you can provide a recent enough version, or if you miss some other dependencies, you can
Expand Down
12 changes: 5 additions & 7 deletions appruntime/io/binding_epoll.c
Expand Up @@ -75,13 +75,11 @@ value ep_close(value fd)
CAMLreturn(Val_int(close(fd))); CAMLreturn(Val_int(close(fd)));
} }


#ifdef __APPLE__ #if (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
#ifdef __MACH__ #define USE_KQUEUE
#define __APPLE__MACH__
#endif
#endif #endif


#ifdef __APPLE__MACH__ #ifdef USE_KQUEUE


#include <sys/types.h> #include <sys/types.h>
#include <sys/event.h> #include <sys/event.h>
Expand Down Expand Up @@ -246,7 +244,7 @@ EXPORT(EPOLLHUP, EV_ERROR); // TODO with a hang up like event
//TODO //EXPORT(EPOLLET); //TODO //EXPORT(EPOLLET);
//TODO //EXPORT(EPOLLONESHOT); //TODO //EXPORT(EPOLLONESHOT);


#else #else /* not USE_KQUEUE */


#include <sys/epoll.h> #include <sys/epoll.h>


Expand Down Expand Up @@ -344,7 +342,7 @@ SIMPLE_EXPORT(EPOLLERR)
SIMPLE_EXPORT(EPOLLET) SIMPLE_EXPORT(EPOLLET)
SIMPLE_EXPORT(EPOLLONESHOT)*/ SIMPLE_EXPORT(EPOLLONESHOT)*/


#endif // __APPLE__MACH__ FALSE BRANCH #endif // USE_KQUEUE FALSE BRANCH


#endif // MLSTATE_UNIX #endif // MLSTATE_UNIX


Expand Down
5 changes: 4 additions & 1 deletion build/bld.sh
@@ -1,4 +1,7 @@
#!/bin/bash -ue #!/usr/bin/env bash

set -u
set -e


# README BEFORE EDITING THIS FILE! # README BEFORE EDITING THIS FILE!
# #
Expand Down
5 changes: 4 additions & 1 deletion build/gen_myocamlbuild.sh
@@ -1,4 +1,7 @@
#!/bin/bash -ue #!/usr/bin/env bash

set -u
set -e


# This script reads files config.{sh,ml}, build_rules*.ml, build_libs, build_tools and uses them # This script reads files config.{sh,ml}, build_rules*.ml, build_libs, build_tools and uses them
# to build an ocamlbuild plugin in <build_dir>/myocamlbuild # to build an ocamlbuild plugin in <build_dir>/myocamlbuild
Expand Down
10 changes: 6 additions & 4 deletions build/myocamlbuild_prefix.ml
Expand Up @@ -26,8 +26,10 @@ open Command


let mlstate_platform = "mlstate_platform" let mlstate_platform = "mlstate_platform"
let is_mac = Config.os = Config.Mac let is_mac = Config.os = Config.Mac
let is_fbsd = Config.os = Config.FreeBSD


let sed = if is_mac then P"gsed" else P"sed" let sed = if is_mac then P"gsed" else P"sed"
let md5 = if is_fbsd then P"md5" else P"md5sum"


(** (**
tools for which we call the windows version (and that need some call translation) tools for which we call the windows version (and that need some call translation)
Expand Down Expand Up @@ -319,11 +321,11 @@ let _ = dispatch begin function
~dep:"%.mllibp" ~dep:"%.mllibp"
~prod:"%.mllib" ~prod:"%.mllib"
(fun env _build -> (fun env _build ->
let tags = String.uppercase (String.concat "\\|" Config.available) in let tags = String.uppercase (String.concat "|" Config.available) in
let sedexpr = let sedexpr =
Printf.sprintf "s/^?HAS_\\(%s\\)://; t OK; /^?HAS_.*:/d; :OK" tags Printf.sprintf "s/^\\?HAS_(%s)://; /HAS_.*:/d" tags
in in
Cmd(S[sed; A sedexpr; P(env "%.mllibp"); Sh">"; P(env "%.mllib")])); Cmd(S[sed; A"-r"; A sedexpr; P(env "%.mllibp"); Sh">"; P(env "%.mllib")]));


(* Windows specific : redefinition of an existing rule in Ocaml_specific.ml, (* Windows specific : redefinition of an existing rule in Ocaml_specific.ml,
Louis please have a look to avoid the two copies at the end Louis please have a look to avoid the two copies at the end
Expand Down
6 changes: 3 additions & 3 deletions build_rules.ml
Expand Up @@ -241,7 +241,7 @@ rule "opa parser version: opalang/syntax/* stdlib -> opalang/syntax/opaParserVer
let files = List.map (fun s-> P s) parser_files in let files = List.map (fun s-> P s) parser_files in
Seq[ Seq[
Cmd(S ( [Sh"echo let hash = \\\" > "; P (opaParserVersion)])); Cmd(S ( [Sh"echo let hash = \\\" > "; P (opaParserVersion)]));
Cmd(S ( [Sh"cat"] @ files @ [Sh"|";Sh"md5sum";Sh">>";P opaParserVersion])); Cmd(S ( [Sh"cat"] @ files @ [Sh"|"; md5; Sh">>"; P opaParserVersion]));
Cmd(S ( [Sh"echo \\\" >>"; P opaParserVersion ] )) Cmd(S ( [Sh"echo \\\" >>"; P opaParserVersion ] ))
] ]
); );
Expand Down Expand Up @@ -650,8 +650,8 @@ rule "opadep: .opa -> .opa.depends"
~dep: "%.opa" ~dep: "%.opa"
~prod: "%.opa.depends" ~prod: "%.opa.depends"
(fun env build -> (fun env build ->
let dep_regex = "^ *import \\+\\(.\\+\\)$" in let dep_regex = "^ *import \\*\\(.\\+\\) *$" in
Cmd(S[sed; A("s%"^dep_regex^"%\\1.opx%; t OK; d; :OK s% %%g"); P(env "%.opa"); Cmd(S[sed; A"-n"; A("s%"^dep_regex^"%\\1.opx%p"); P(env "%.opa");
Sh">";P(env "%.opa.depends")])); Sh">";P(env "%.opa.depends")]));


rule "opacomp: .opa -> .native" rule "opacomp: .opa -> .native"
Expand Down
5 changes: 4 additions & 1 deletion buildinfos/generate_buildinfos.sh
@@ -1,4 +1,7 @@
#!/bin/bash -eu #!/usr/bin/env bash

set -e
set -u
# Copyright © 2011 MLstate # Copyright © 2011 MLstate


# This file is part of OPA. # This file is part of OPA.
Expand Down
2 changes: 1 addition & 1 deletion compilerlib/opadep.sh
@@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash


# This script is used for generating opa files and packages dependency graphs # This script is used for generating opa files and packages dependency graphs
# It is meant to be called from any directory containing some .opx/ directories # It is meant to be called from any directory containing some .opx/ directories
Expand Down
5 changes: 4 additions & 1 deletion config.mli
Expand Up @@ -60,9 +60,12 @@ val all_tags : string list
val is_release : bool val is_release : bool


(** the target OS type *) (** the target OS type *)
type os = Linux | Mac | Win32 | Cygwin type os = Linux | Mac | Win32 | Cygwin | FreeBSD
val os : os val os : os


(** the name of the GNU make binary, gmake on fBSD, make on other platforms *)
val makebinary : string

(** the installation directory of external libraries, as in the ocamlopt '-I' (** the installation directory of external libraries, as in the ocamlopt '-I'
command-line option ; None if no extra include directory is needed *) command-line option ; None if no extra include directory is needed *)
module Libdir : sig module Libdir : sig
Expand Down
49 changes: 43 additions & 6 deletions configure
@@ -1,4 +1,7 @@
#!/bin/bash -ue #!/usr/bin/env bash

set -u
set -e


: ${OPA_SOURCE_DIR:=$(dirname $0)} : ${OPA_SOURCE_DIR:=$(dirname $0)}
if [ "${OPA_SOURCE_DIR#/}" = "$OPA_SOURCE_DIR" ]; then OPA_SOURCE_DIR=$PWD/$OPA_SOURCE_DIR; fi if [ "${OPA_SOURCE_DIR#/}" = "$OPA_SOURCE_DIR" ]; then OPA_SOURCE_DIR=$PWD/$OPA_SOURCE_DIR; fi
Expand Down Expand Up @@ -112,17 +115,20 @@ case $(uname) in
Darwin*) Darwin*)
echo-ok MacOS echo-ok MacOS
IS_MAC=1;; IS_MAC=1;;
Linux*) Linux*|GNU/kFreeBSD)
echo-ok Linux echo-ok Linux
IS_LINUX=1;; IS_LINUX=1;;
FreeBSD)
echo-ok FreeBSD
IS_FREEBSD=1;;
*) *)
echo-err "Not sure, probably Unix / Linux" echo-err "Not sure, probably Unix / Linux"
IS_LINUX=1 IS_LINUX=1
esac esac


echo-check your architecture echo-check your architecture
case $(uname -m) in case $(uname -m) in
x86_64) x86_64|amd64)
echo-ok x86_64;; echo-ok x86_64;;
i?86) i?86)
echo-ok ix86;; echo-ok ix86;;
Expand Down Expand Up @@ -170,6 +176,16 @@ if [ -n "${IS_MAC:-}" ]; then
. ./platform_helper.sh . ./platform_helper.sh
fi fi


if [ -n "${IS_FREEBSD:-}" ]; then
echo-check gmake
if which gmake >/dev/null 2>&1; then echo-ok ok
else
echo-err Not found
echo "Please install port devel/gmake."
exit 1
fi >&2
fi

# check ocaml version and location # check ocaml version and location
echo-check ocamlopt echo-check ocamlopt
if OCAMLOPT=${OCAMLOPT:-$(which ocamlopt.opt)} || OCAMLOPT=${OCAMLOPT:-$(which ocamlopt)} if OCAMLOPT=${OCAMLOPT:-$(which ocamlopt.opt)} || OCAMLOPT=${OCAMLOPT:-$(which ocamlopt)}
Expand Down Expand Up @@ -287,6 +303,15 @@ else
exit 1 exit 1
fi >&2 fi >&2


# - checking for java
echo-check for java
if which java &>/dev/null; then
echo-ok found
else
echo-err Not found
exit 1
fi

# - checking camlidl * # - checking camlidl *
echo-check for camlidl echo-check for camlidl
if [ -n "${NO_CAMLIDL:-}" ]; then if [ -n "${NO_CAMLIDL:-}" ]; then
Expand Down Expand Up @@ -627,13 +652,20 @@ let available = [ $TAGS_LIST]
let all_tags = [ $(for t in $ALL_TAGS_LIST; do echo -n "\"$t\"; "; done)] let all_tags = [ $(for t in $ALL_TAGS_LIST; do echo -n "\"$t\"; "; done)]


let is_release = $(camlbool "$IS_RELEASE") let is_release = $(camlbool "$IS_RELEASE")
type os = Linux | Mac | Win32 | Cygwin type os = Linux | Mac | Win32 | Cygwin | FreeBSD
let os = let os =
$(if [ -n "${IS_LINUX:-}" ]; then echo Linux $(if [ -n "${IS_LINUX:-}" ]; then echo Linux
elif [ -n "${IS_MAC:-}" ]; then echo Mac elif [ -n "${IS_MAC:-}" ]; then echo Mac
elif [ -n "${IS_FREEBSD:-}" ]; then echo FreeBSD
else echo 'match Sys.os_type with "Win32" -> Win32 | "Cygwin" -> Cygwin | _ -> assert false' else echo 'match Sys.os_type with "Win32" -> Win32 | "Cygwin" -> Cygwin | _ -> assert false'
fi) fi)


let makebinary =
$(if [ -n "${IS_FREEBSD:-}" ];
then echo '"gmake"'
else echo '"make"'
fi)

module Libdir = struct module Libdir = struct
let ssl = $(dir_opt "$CONFIG_LIB_OCAMLSSL") let ssl = $(dir_opt "$CONFIG_LIB_OCAMLSSL")
let cryptokit = $(dir_opt "$CONFIG_LIB_CRYPTOKIT") let cryptokit = $(dir_opt "$CONFIG_LIB_CRYPTOKIT")
Expand Down Expand Up @@ -670,9 +702,11 @@ IS_RELEASE="$IS_RELEASE"
IS_LINUX="${IS_LINUX:-}" IS_LINUX="${IS_LINUX:-}"
IS_WINDOWS="${IS_WINDOWS:-}" IS_WINDOWS="${IS_WINDOWS:-}"
IS_MAC="${IS_MAC:-}" IS_MAC="${IS_MAC:-}"
IS_FREEBSD="${IS_FREEBSD:-}"
OS=$(if [ -n "${IS_LINUX:-}" ]; then echo '"Linux"' OS=$(if [ -n "${IS_LINUX:-}" ]; then echo '"Linux"'
elif [ -n "${IS_MAC:-}" ]; then echo '"Mac"' elif [ -n "${IS_MAC:-}" ]; then echo '"Mac"'
elif [ -n "${IS_WINDOWS:-}" ]; then echo '"Win32"' elif [ -n "${IS_WINDOWS:-}" ]; then echo '"Win32"'
elif [ -n "${IS_FREEBSD:-}" ]; then echo '"FreeBSD"'
else echo "Error: OS inconsistency" >&2; exit 2 else echo "Error: OS inconsistency" >&2; exit 2
fi) fi)


Expand All @@ -690,8 +724,11 @@ EOF


sed 's/=["(]\(.*\)[)"]$/ := \1/' config.sh > config.make sed 's/=["(]\(.*\)[)"]$/ := \1/' config.sh > config.make
if [ -n "${IS_MAC:-}" ]; then if [ -n "${IS_MAC:-}" ]; then
echo "INSTALL := gcp -u -L" echo "INSTALL := gcp -u -L" >>config.make
fi >>config.make fi
if [ -n "${IS_FREEBSD:-}" ]; then
echo "INSTALL := cp" >>config.make
fi


{ {
echo echo
Expand Down
7 changes: 5 additions & 2 deletions dependencies/installation_helper.sh
@@ -1,4 +1,7 @@
#!/bin/bash -ue #!/usr/bin/env bash

set -u
set -e


SCRIPTDIR=$(dirname $0) SCRIPTDIR=$(dirname $0)
cd $SCRIPTDIR cd $SCRIPTDIR
Expand Down Expand Up @@ -335,7 +338,7 @@ package_install (){
./configure -prefix $PREFIX ${CYGOPT:-} ./configure -prefix $PREFIX ${CYGOPT:-}
make world # clean world make world # clean world
make bootstrap make bootstrap
if [ $IS_LINUX ] || [ $IS_MAC ]; then if [ $IS_LINUX ] || [ $IS_MAC ] || [ $IS_FREEBSD ]; then
make opt && make opt.opt make opt && make opt.opt
fi fi
PREFIX=$INSTALLDIR $SUDO make install -e PREFIX=$INSTALLDIR $SUDO make install -e
Expand Down
5 changes: 4 additions & 1 deletion dissemination/spawn.sh
@@ -1,4 +1,7 @@
#!/bin/bash -ue #!/usr/bin/env bash

set -u
set -e


# #
# Copyright © 2011 MLstate # Copyright © 2011 MLstate
Expand Down
4 changes: 3 additions & 1 deletion gitinit.sh
@@ -1,4 +1,6 @@
#!/bin/bash -e #!/usr/bin/env bash

set -e


help () ( help () (
echo "$0:" echo "$0:"
Expand Down
5 changes: 4 additions & 1 deletion install_release.sh
@@ -1,4 +1,7 @@
#!/bin/bash -eu #!/usr/bin/env bash

set -e
set -u


. ./platform_helper.sh . ./platform_helper.sh


Expand Down
2 changes: 1 addition & 1 deletion libbase/ocamlbase
@@ -1,3 +1,3 @@
#!/bin/bash #!/usr/bin/env bash


rlwrap ocamlbase.top -I $MLSTATELIBS/lib/opa/static $@ rlwrap ocamlbase.top -I $MLSTATELIBS/lib/opa/static $@
2 changes: 1 addition & 1 deletion libbsl/bslbrowser
@@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash


P=$MLSTATELIBS/lib/opa/static P=$MLSTATELIBS/lib/opa/static
OPA=$P/opabslgen.bypass OPA=$P/opabslgen.bypass
Expand Down
15 changes: 12 additions & 3 deletions make_package.sh
@@ -1,4 +1,7 @@
#!/bin/bash -eu #!/usr/bin/env bash

set -e
set -u


#PREFIX=/usr #PREFIX=/usr
INSTALLDIR=$PWD/release_install_root INSTALLDIR=$PWD/release_install_root
Expand Down Expand Up @@ -123,7 +126,10 @@ if [ -n "$AUTOINSTALL" ]; then
AUTOINSTALL=${AUTOINSTALL//\{\}/$VERSION_STRING} AUTOINSTALL=${AUTOINSTALL//\{\}/$VERSION_STRING}
msg "Making $AUTOINSTALL" msg "Making $AUTOINSTALL"
cat >"$INSTALLDIR/install.sh" <<EOF cat >"$INSTALLDIR/install.sh" <<EOF
#!/bin/bash -eu #!/usr/bin/env bash

set -e
set -u


if [ -n "\${1:-}" ]; then if [ -n "\${1:-}" ]; then
echo "Installing in \$1" echo "Installing in \$1"
Expand Down Expand Up @@ -164,7 +170,10 @@ EOF
chmod a+x "$INSTALLDIR/install.sh" chmod a+x "$INSTALLDIR/install.sh"


cat >"$INSTALLDIR/share/opa/uninstall.sh" <<"EOF" cat >"$INSTALLDIR/share/opa/uninstall.sh" <<"EOF"
#!/bin/bash -eu #!/usr/bin/env bash

set -e
set -u


SCRIPT="$0" SCRIPT="$0"
if [ "${SCRIPT:0:1}" != "/" ]; then if [ "${SCRIPT:0:1}" != "/" ]; then
Expand Down
2 changes: 1 addition & 1 deletion passlib/opatrack.sh
@@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash


export ROOT=`pwd` export ROOT=`pwd`


Expand Down
8 changes: 6 additions & 2 deletions platform_helper.sh
@@ -1,4 +1,7 @@
#!/bin/bash -eu #!/usr/bin/env bash

set -e
set -u


# Include in your scripts to detect the host platform and have appropriate # Include in your scripts to detect the host platform and have appropriate
# aliases set for some commands (eg use the GNU versions on a mac) # aliases set for some commands (eg use the GNU versions on a mac)
Expand All @@ -13,7 +16,8 @@ IS_WINDOWS=""
case $(uname) in case $(uname) in
CYGWIN*) IS_WINDOWS=1;; CYGWIN*) IS_WINDOWS=1;;
Darwin*) IS_MAC=1;; Darwin*) IS_MAC=1;;
Linux*) IS_LINUX=1;; Linux*|GNU/kFreeBSD) IS_LINUX=1;;
FreeBSD) IS_FREEBSD=1;;
*) *)
echo "Error: could not detect OS. Defaulting to Linux" >&2 echo "Error: could not detect OS. Defaulting to Linux" >&2
IS_LINUX=1 IS_LINUX=1
Expand Down