diff --git a/makenemo b/makenemo
index 2e04982061101e237a5998f41f2d173031724327..958793021f75258b4171e548d2748212dc74c1e1 100755
--- a/makenemo
+++ b/makenemo
@@ -313,7 +313,7 @@ else
     echo
 fi
 if [[ -n "${x_d}" || ${DO_NEW:-0} -eq 1 ]]; then
-    [ -f ${CFG_DIR}/work_cfgs.txt ] && sed -i "/^${CUR_CONF} /d" ${CFG_DIR}/work_cfgs.txt
+    [ -f ${CFG_DIR}/work_cfgs.txt ] && sed -i'' -e "/^${CUR_CONF} /d" ${CFG_DIR}/work_cfgs.txt
     echo ${CUR_CONF} "${NEM_SUBDIR[*]}" >> ${CFG_DIR}/work_cfgs.txt
 fi
 
@@ -343,7 +343,7 @@ fi
 
 # CPP keys check
 if [ $chk_key -eq 1 ] ; then
-    for kk in $( sed -n "s/bld::tool::fppkeys \+//p" ${NEMO_TDIR}/${CUR_CONF}/cpp_${CUR_CONF}.fcm ); do
+    for kk in $( sed -n -e "s/bld::tool::fppkeys \+//p" ${NEMO_TDIR}/${CUR_CONF}/cpp_${CUR_CONF}.fcm ); do
         if ! grep -q $kk ${NEMO_TDIR}/${CUR_CONF}/BLD/full_key_list.txt; then
 	    echo
 	    echo "E R R O R : key "$kk" is not found in ${NEMO_TDIR}/${CUR_CONF}/WORK routines..."
diff --git a/mk/Fadd_keys.sh b/mk/Fadd_keys.sh
index d563a75adb5afdfdac950d53a1d091e33b4fdc43..dce6699bd30a0f38fabe9c3542d79bc00c32ac4c 100755
--- a/mk/Fadd_keys.sh
+++ b/mk/Fadd_keys.sh
@@ -69,7 +69,7 @@ for i in ${2} ; do
     if [ "$(cat ${1}/cpp_$(basename ${1}).fcm | grep -c "\<$i\>" )" -ne 0 ] ; then
         echo "key $i already present in cpp_$(basename ${1}).fcm"
     else
-        sed -i "s/$/ ${i}/" ${1}/cpp_$(basename ${1}).fcm
+        sed -i'' -e "s/$/ ${i}/" ${1}/cpp_$(basename ${1}).fcm
         echo "added key $i in $(basename ${1})"
     fi
 done
diff --git a/mk/Fcheck_archfile.sh b/mk/Fcheck_archfile.sh
index b57a6aa389d8fcac6397bdf5ba1757715045c759..2602bc83bde4b7caaa359093d343fbc18269d1f5 100755
--- a/mk/Fcheck_archfile.sh
+++ b/mk/Fcheck_archfile.sh
@@ -222,11 +222,11 @@ if [ -n "${4}" ]; then
        exit 1
     fi
     # duplicate the lines starting with %DEBUG_XXX and replace, in the duplicated line, %DEBUG_XXX by %XXX
-    sed -i "/^%DEBUG_/{p;s/^%DEBUG_\([^ ]*\)/%\1/;}" $1
+    sed -i'' -e "/^%DEBUG_/{p;s/^%DEBUG_\([^ ]*\)/%\1/;}" $1
 else
     if (! grep -q "^%PROD_FCFLAGS" $1 ); then
         echo "WARNING: '%PROD_FCFLAGS' not defined in your arch file, makenemo will use '%FCFLAGS' instead"
     fi
     # duplicate the lines starting with %PROD_XXX and replace, in the duplicated line, %PROD_XXX by %XXX
-    sed -i "/^%PROD_/{p;s/^%PROD_\([^ ]*\)/%\1/;}" $1
+    sed -i'' -e "/^%PROD_/{p;s/^%PROD_\([^ ]*\)/%\1/;}" $1
 fi
diff --git a/mk/Fclean_config.sh b/mk/Fclean_config.sh
index 19ca4f060de8034e108a07940d67e0f33c2e8c20..0b591c6bca1aa480877833eb34bd34aa3bd54f26 100755
--- a/mk/Fclean_config.sh
+++ b/mk/Fclean_config.sh
@@ -73,12 +73,12 @@ else
 	echo " "
 	echo "Are you sure that you want to remove this directory $CONF? [y/n] "
 	read answer
-	answer=`echo $answer | sed 's/^[y].*$/y/'`
+	answer=`echo $answer | sed -e 's/^[y].*$/y/'`
 
 	if [  -z "$answer" -o "x$answer" = "xy" ]; then
 
 		rm -rf ${CONFIG_DIR}/${CONF}
-		sed -i "/^${CONF} /d"  ${CONFIG_DIR}/work_cfgs.txt >  ${CONFIG_DIR}/work_cfgs.tmp
+		sed -i'' -e "/^${CONF} /d"  ${CONFIG_DIR}/work_cfgs.txt >  ${CONFIG_DIR}/work_cfgs.tmp
 		echo "${CONF} configuration REMOVED" 
 
 	else
diff --git a/mk/Fdel_keys.sh b/mk/Fdel_keys.sh
index 4bbcd38b82543dfbd0cc44f7db4bf648c605a5da..82e4234607fa24fbca3e2ccf45194e3c4f92fa34 100755
--- a/mk/Fdel_keys.sh
+++ b/mk/Fdel_keys.sh
@@ -64,9 +64,9 @@ echo "Removing keys ${2} in : ${1}"
 
 for i in ${2} ; do
      if [ "$(echo ${i} | grep -c key_nproc )" -gt 0 ]; then
-        sed -i "s/key_nproc[ij]=.* //" ${1}/cpp_$(basename ${1}).fcm
+        sed -i'' -e "s/key_nproc[ij]=.* //" ${1}/cpp_$(basename ${1}).fcm
      elif [ "$(cat ${1}/cpp_$(basename ${1}).fcm | grep -c "$i")" -gt 0 ]; then
-         sed -i "s/\b${i}\b//" ${1}/cpp_$(basename ${1}).fcm
+         sed -i'' -e "s/\b${i}\b//" ${1}/cpp_$(basename ${1}).fcm
          echo "deleted key $i in $(basename ${1})"
      fi
 done
diff --git a/mk/Flist_archfile.sh b/mk/Flist_archfile.sh
index 506f620bc827b96bad1b7fcabf5f552e27258753..ed587eb949945aa5938ff17aff3211bc1a2a0565 100755
--- a/mk/Flist_archfile.sh
+++ b/mk/Flist_archfile.sh
@@ -58,7 +58,7 @@ set -o posix
 archfile_loop() {
 
 	for file in $( ls $1/*.fcm ); do
-		zvar1=$( basename $file | sed 's/arch-\(.*\).fcm/\1/' )
+		zvar1=$( basename $file | sed -e 's/arch-\(.*\).fcm/\1/' )
 		zvar2=$( head -1  $file | tr -d '#'                   )
 		printf "%-30s %-s\n" ${zvar1} "${zvar2}"
 	done
diff --git a/mk/Fmake_config.sh b/mk/Fmake_config.sh
index ae844c4023a0aaaa9c3a38b0f9ae43026b69a2d8..4020855cb5b7e47d50478834f25193abcb5d615f 100755
--- a/mk/Fmake_config.sh
+++ b/mk/Fmake_config.sh
@@ -54,9 +54,29 @@ set -o posix
 #   * creation
 #
 #-
+# function to mimic "readlink -f" command (not available on MacOS)
+# source: https://stackoverflow.com/a/1116890
+rlf ()
+{
+    TARGET_FILE=$1;
+    cd `dirname $TARGET_FILE`;
+    TARGET_FILE=`basename $TARGET_FILE`;
+    while [ -L "$TARGET_FILE" ]; do
+        TARGET_FILE=`readlink $TARGET_FILE`;
+        cd `dirname $TARGET_FILE`;
+        TARGET_FILE=`basename $TARGET_FILE`;
+    done;
+    PHYS_DIR=`pwd -P`;
+    RESULT=$PHYS_DIR/$TARGET_FILE;
+    echo $RESULT
+}
+
 [ ! -d ${1} ] && \mkdir -p ${1}
+
+# CPP
 [ "${2}" != "${1}" ] && \cp -n ${2}/cpp_${2##*/}.fcm ${1}/cpp_${1##*/}.fcm
-#
+
+# EXP00
 if [ ! -d ${1}/EXP00 ]
 then
     echo "   Creating ${1}/EXP00"
@@ -64,20 +84,21 @@ then
     echo "    -> Copying existing xml, namelist and AGRIF_FixedGrids.in files from ${2}/EXPREF to ${1}/EXP00"
     for f in $( ls -1 ${2}/EXPREF/*.xml ${2}/EXPREF/*namelist* ${2}/EXPREF/AGRIF_FixedGrids.in 2>/dev/null )
     do
-	if [[ -L ${f} && $( readlink -f ${f} ) =~ "SHARED" ]]
+	if [[ -L ${f} && $( rlf ${f} ) =~ "SHARED" ]]
 	then
 	    # create absolute(relative) symlinks if config directory is outside(inside) nemo directory
             if [[ $(dirname ${1}) != $(dirname ${2}) ]]; then
-              \ln -sf $( readlink -f ${f} ) ${1}/EXP00/$( basename ${f} )   # keep link from SHARED
+              \ln -sf $( rlf ${f} ) ${1}/EXP00/$( basename ${f} )   # keep link from SHARED
             else
-              (cd ${1}/EXP00; \ln -sf ../../../cfgs/SHARED/$(basename $(readlink -f ${f}) ) $( basename ${f} ))
+              (cd ${1}/EXP00; \ln -sf ../../../cfgs/SHARED/$(basename $(rlf ${f}) ) $( basename ${f} ))
             fi
 	else
 	    \cp ${f} ${1}/EXP00/.
 	fi
     done
 fi
-#
+
+# MY_SRC
 if [ ! -d ${1}/MY_SRC ]
 then
     if [ -d ${2}/MY_SRC ]
diff --git a/mk/Fread_dir.sh b/mk/Fread_dir.sh
index 2e92921abff7c117ac525cb4eed4f1437c5774d6..27b989c837cd3e636fa8931bd878f7250a0986b7 100755
--- a/mk/Fread_dir.sh
+++ b/mk/Fread_dir.sh
@@ -55,7 +55,7 @@ set -o posix
 if [ "$2" == "YES" ]; then
    echo -n " $1 [Y/n] "
    read answer
-   answer=`echo $answer | sed 's/^[yY].*$/y/'`
+   answer=`echo $answer | sed -e 's/^[yY].*$/y/'`
    if [  -z "$answer" -o "x$answer" = "xy" ]; then
       TAB[$ind]="$1"
       let ind=ind+1
@@ -69,7 +69,7 @@ if [ "$2" == "YES" ]; then
 else
    echo -n " $1 [y/N] "
    read answer
-   answer=`echo $answer | sed 's/^[nN].*$/N/'`
+   answer=`echo $answer | sed -e 's/^[nN].*$/N/'`
    if [ "x$answer" = "xy" ]; then
       TAB[$ind]="$1"
       let ind=ind+1