source: branches/ORCHIDEE_2_2/ORCHIDEE/makeorchidee_fcm @ 8387

Last change on this file since 8387 was 8387, checked in by josefine.ghattas, 5 months ago

Added new argument -linkwithoasis needed to compile offline drivers in the fully coupled configuration IPSLCM7 (when OASIS is included). See ticket #968

File size: 19.3 KB
Line 
1#!/bin/bash
2
3#==============================================================================================================================\n
4#  MODULE       : makeorchidee_fcm
5#
6#  CONTACT      : orchidee-help _at_ listes.ipsl.fr
7#
8#  LICENCE      : IPSL (2006)
9#  This software is governed by the CeCILL licence see ORCHIDEE/ORCHIDEE_CeCILL.LIC
10#
11# SVN     :
12# $HeadURL: svn://forge.ipsl.jussieu.fr/orchidee/trunk/ORCHIDEE/makeorchidee_fcm $
13# $Date: $
14# $Revision: $
15# \n
16####################################################################################################
17#
18# This script has several possible functions :
19#   1. Compiling ORCHIDEE
20#   2. Building of the documentation
21#
22#***************************************************************************************************
23#
24# Command lines :
25#
26#   1) makeorchidee_fcm   [ -parallel  PARALLEL_TYPE ]
27#                         [ -driver ]
28#                         [ -arch XXX ]
29#                         [ -prod | -dev | -debug ]
30#
31#   2) makeorchidee_fcm   [ -clean ]
32#
33#   3) makeorchidee_fcm   [ -doc | -doc_para ] ## actually doc_para is commented
34#                         [ -rmdoc ]
35#                         [ -doc_tree ]
36#
37
38########################################################################
39#
40# 1) Set default values. Some of them can be specified using environnement variables.
41#
42
43is_driver_opt=FALSE
44is_oasisdriver_opt=FALSE
45is_other_opt=FALSE
46clean=FALSE
47compile_flags="%PROD_FFLAGS"
48xios=FALSE
49full=""
50ext_src=""
51export P_P=""
52export SECTIONS_PARA=""
53ORCHDIR=`/bin/pwd`
54fcm_path=$ORCHDIR/tools/FCM_V1.2/bin
55compile_doc=FALSE
56
57arch_default_path="arch"
58arch_path="arch"
59
60# Option linkwithoasis is used when XIOS is compiled with OASIS. This is the case in IPSLCM7 configuration
61# where the OASIS libraries needs to be included in the creation of the executables.
62linkwithoasis=FALSE
63
64# Path to store files produced during compilation
65# Note: config_path was previously named .config
66rel_config_path=build
67config_path=$ORCHDIR/${rel_config_path}
68
69# Following variables can be set as environement variables if wanted
70if [ -n "$FCM_ARCH" ]; then
71    arch="$FCM_ARCH"
72else
73    arch=NONE
74fi
75if [ -n "$FCM_PARA" ]; then
76    parallel_mode="$FCM_PARA"
77else
78    parallel_mode=seq
79fi
80if [ -n "$FCM_JOBS" ]; then
81    job="$FCM_JOBS"
82else
83    job=1
84fi
85
86
87#########################################################################
88# 2. Read arguments
89#
90while (($# > 0)) ; do
91
92  case $1 in
93    "-h")
94        print_help=TRUE ; shift ;;
95
96    "-parallel")
97        parallel_mode=$2 ; shift ; shift ;;
98
99    "-p")
100        parallel_mode=$2 ; shift ; shift ;;
101                       
102    "-driver")
103        is_driver_opt=TRUE ; shift ;;
104
105    "-oasisdriver")
106        is_oasisdriver_opt=TRUE ; shift ;;
107
108    "-otherexec")
109        is_other_opt=TRUE
110        is_driver_opt=TRUE ; shift ;;
111   
112    "-linkwithoasis")
113        linkwithoasis=TRUE ; shift ;;
114
115    "-arch")
116        arch="$2" ; shift ; shift ;;
117
118    "-arch_path")
119        arch_path=$2 ; shift ; shift ;;
120
121    "-xios")
122        xios=TRUE
123        shift ;;
124
125    "-xios2")
126        xios=TRUE
127        shift ;;
128
129    "-noxios")
130        xios=FALSE
131        shift ;;
132
133    "-prod")
134        compile_flags="%PROD_FFLAGS" ; shift ;;
135
136    "-dev")
137        compile_flags="%DEV_FFLAGS" ; shift ;;
138
139    "-debug")
140        compile_flags="%DEBUG_FFLAGS" ; shift ;;
141
142     "-j")
143        job="$2" ; shift ; shift ;;
144     
145     "-full")
146        full='-full' ; shift ;;
147
148     "-clean")
149        clean=TRUE ; shift ;;
150
151     "-ext_src")
152        ext_src=$2 ; shift ; shift ;;
153
154#    "-doc_para")
155#        setenv P_P -DCPP_PARA
156#       setenv SECTIONS_PARA "-e s&ENABLED_SECTIONS\ *= &ENABLED_SECTIONS       = CPP_PARA&g"
157#       goto doc
158
159     "-doc")
160          compile_doc=TRUE ; shift ;;
161
162     "-rmdoc")
163          \rm -rf docs
164          shift ;;
165
166     "-doc_tree") 
167          cd ..
168        find ORCHIDEE \( -not -path '*.svn*' \
169                        -a \( -name '*.f90' -o -name "*.F90" -o -name "*.h" \) \) \
170                    -exec bash -c 'mkdir -p ORCHIDEE/DOC/$( dirname {} )/$( echo $( basename {} ) | sed -e "s/\..*//" )' \;
171        cd ORCHIDEE
172        shift ;;
173
174    *)
175        echo "unknown option "$1" , exiting..."
176        exit
177   esac
178done
179
180#########################################################################
181# 3. Print help documentation and exit
182#
183if [[ "$print_help" == "TRUE" ]] ; then
184  cat <<fin
185
186########################################################################
187# Usage of the script makeorchidee_fcm
188#
189# makeorchidee_fcm compiles ORCHIDEE using the Fcm software developed
190# by the Hadley Centre. Fcm is stored in tools directory.
191# Platform specific compile options are found in the arch directory.
192########################################################################
193
194./makeorchidee_fcm [Options]
195
196Main options
197[ -h ]        : show this help
198
199[ -arch XXX ] : name of the architecture file containing platform dependent compile options.
200                The files arch/arch-XXX.fcm and arch/arch-XXX.path must exist. If the
201                file arch/arch-XXX.env exist, it'll be sourced before compilation starts.
202
203[ -arch_path XXX ] : directory of the archicture file containg platform dependent compile options.
204                     Default is ./arch directory. If the files are not found in the folder given by arch_path,
205                     the default ./arch folder will be used.
206
207[ -parallel|-p PARALLEL_TYPE ] : choose parallelization mode for ORCHIDEE :
208    PARALLEL_TYPE =
209    ( mpi | MPI )              : only MPI (Message Passing Interface)
210    ( omp | OMP )              : only OpenMP
211    ( mpi_omp | MPI_OMP )      : hybrid MPI/OpenMP mode
212    ( none | NONE | seq )      : sequential mode (default)
213
214[ -driver ]      : compilation of ORCHIDEE offline standard driver
215[ -otherexec ]   : compilation of other programs: forcesoil, testrouting.
216                   Warning! All these programs are not fully validated or maintained.
217
218Options related to cleaning
219| -clean ]       : delete all files produced during previous compilation
220| -full ]        : activate full recompiling
221
222Options for XIOS, only choose one of the following
223[ -xios | -xios2 ] : linking with XIOS 2.0 (it is not longer possible to use XIOS1)
224[ -noxios ]        : compilation without XIOS (default)
225
226Options for optimization, choose only one of the following
227[ -prod ]        : compilation for production (all optimization)
228[ -dev ]         : compilation for development (low optimization and -g)
229[ -debug ]       : compilation for debugging (no optimization and all debug options)
230
231Option to optimize the compilation time
232[ -j x ]         : activate parallel compiling on x task, default 1 task
233
234Option to add extra source to compile
235[ -ext_src path] : path to an additional directory with fortran routines to compile with the model
236
237Options for compiling the Doxygen documentation
238[ -doc ]         : generate documentation with Doxygen (exit after doc computation)
239[ -doc_para ]    : generate documentation with Doxygen with parallelization calls
240[ -rmdoc ]       : remove documentation directory (before generate new documentation with Doxygen ?)
241[ -doc_tree ]    : generate tree of ORCHIDEE directories for each file
242
243
244Example 1 : compile at curie(TGCC) for MPI parallel run mode
245   ./makeorchidee_fcm -parallel mpi -arch X64_CURIE -driver
246
247Example 2 : compile at ada(IDRIS) for MPI-OpenMP parallel run mode
248   ./makeorchidee_fcm -parallel mpi_omp -arch X64_ADA -driver
249
250Example 3 : compile at obelix(LSCE)
251   ./makeorchidee_fcm -arch ifort_LSCE -driver
252
253Example 4 : compile using gfortran compiler for sequential run mode
254First make sure that the files arch/gfortran.fcm and arch/gfortran.path are suitable for
255your environement especially the path to netcdf library.
256   ./makeorchidee_fcm -parallel seq -arch gfortran -driver
257
258Example 5 : clean files created during previous compilation
259   ./makeorchidee_fcm -clean
260
261fin
262
263  exit
264fi
265#
266#
267#####################################################################################################
268# 4. Building the documentation:
269# ------------------------------
270# We assume to start in the ORCHIDEE directory
271#
272#****  Directory structure:
273#
274# ..                       : parent of the start dir.
275#   -- ORCHIDEE            : ($MODELPATH), start directory
276#       - src_sechiba
277#       - src_stomate
278#       + DOC
279#       + webdoc
280#   -- IOIPSL
281#       - src
282#   ++ modeles_doc         : ($SRCPATH), source files for the documentation, emptied at start, temporary
283#
284#****  gawk scripts called :
285#
286# codeinc.awk              : encaspulates code parts in Doxygen documentation
287# codedox.awk              : transforms almost all comments in Doxygen comments for documentation
288# codealgo.awk             : emphasizes main algorithm description of each routine in their Doxygen documentation
289#
290#****
291if [[ "$comple_doc" == "TRUE" ]] ; then
292
293    unalias cd
294
295    export REV=`svn info | grep vision | sed -e 's&.*vision.*: \([0-9]*\)&\1&' | head -n 1`
296    export TAG=`svn info | grep URL | sed -e 's&.*URL.*: svn://forge.ipsl.jussieu.fr/orchidee/\(.*\)&\1&' | head -n 1 | xargs dirname`
297    cd ..
298   
299    \rm -rf modeles_doc
300    export MODELPATH=${PWD}
301    \mkdir modeles_doc
302    export SRCPATH=${MODELPATH}/modeles_doc
303   
304    find IOIPSL/src \( -not -path '*.svn*' \
305        -a \( -name '*.f90' -o -name "*.F90" -o -name "*.h" \) \) \
306        -exec bash -c 'mkdir -p '${SRCPATH}'/$( dirname {} ); cp -p {} '${SRCPATH}'/$( dirname {} )' \;
307           
308    find ORCHIDEE \( -not -path '*.svn*' \
309        -a \( -name '*.f90' -o -name "*.F90" -o -name "*.h" \) \) \
310        -exec bash -c 'mkdir -p '${SRCPATH}'/$( dirname {} ); cp -p {} '${SRCPATH}'/$( dirname {} )' \;
311    cd ${SRCPATH}
312    # Use standard preprocessor to suppress all preproc directives
313    \find . -name "*.f90" -exec cpp -P -C -traditional -x assembler-with-cpp ${P_P} '{}' '{}'_ \;
314    \find . -name "*.f90" -print -exec mv -f '{}'_ '{}' \;
315
316    # use codeinc script to encaspulate code parts in Doxygen documentation
317    \find . -name "*.f90" -exec gawk -f ${MODELPATH}/ORCHIDEE/DOC/TOOLS/codeinc.awk '{}' \; > /dev/null
318    \find . -name "*.f90" -print -exec mv -f '{}'_preproc_codeinc '{}' \;
319    # use codedox script to transform almost all comments in Doxygen comments for documentation (use with care !)
320    \find . -name "*.f90" -exec gawk -f ${MODELPATH}/ORCHIDEE/DOC/TOOLS/codedox.awk '{}' \; > /dev/null
321    \find . -name "*.f90" -print -exec mv -f '{}'_preproc_codedox '{}' \;
322   
323    # use codealgo script to emphasize main algorithm description of each routine in their Doxygen documentation
324    \find . -name "*.f90" -exec gawk -f ${MODELPATH}/ORCHIDEE/DOC/TOOLS/codealgo.awk '{}' \; > /dev/null
325    \find . -name "*.f90" -print -exec mv -f '{}'_preproc_codealgo '{}' \;
326    cd ../ORCHIDEE
327    \rm -f ${MODELPATH}/ORCHIDEE/Doxyfile_ORCHIDEE
328    sed -e 's&MYPATH&'${MODELPATH}'&g' -e 's&SRCPATH&'${SRCPATH}'&g' \
329        -e 's&MYTAG&'${TAG}'&' -e 's&MYREV&'${REV}'&' ${SECTIONS_PARA} \
330        ${MODELPATH}/ORCHIDEE/Doxyfile_ORCHIDEE.init > ${MODELPATH}/ORCHIDEE/Doxyfile_ORCHIDEE
331    \rm -f ${MODELPATH}/ORCHIDEE/DOC/header.tex
332    sed -e "s&MYTAG&${TAG}&" -e "s&MYREV&${REV}&" \
333        ${MODELPATH}/ORCHIDEE/DOC/header.tex.init > ${MODELPATH}/ORCHIDEE/DOC/header.tex
334    ln -s /home/orchidee01/maignan/ORCHIDEE/DOC/IMAGES ${MODELPATH}/ORCHIDEE/DOC/IMAGES
335    gmake doc
336    gmake bib
337    gmake toc
338    \rm -rf ${MODELPATH}/ORCHIDEE/webdoc
339    \mv ${MODELPATH}/ORCHIDEE/docs/html ${MODELPATH}/ORCHIDEE/webdoc
340    gmake index
341    gmake toc
342    \rm -rf ${SRCPATH}
343    cp ${MODELPATH}/ORCHIDEE/docs/latex/refman.pdf ${MODELPATH}/ORCHIDEE/documentation.pdf
344    exit
345fi
346
347#####################################################################################################
348# 5. Clean directory from files produced during previous compilation
349# --------------------------------------
350if [[ "$clean" == "TRUE" ]] ; then
351    # Remove the whole directory created during previous compilation
352    rm -fr ${config_path}
353
354    # Clean ORCHIDEE modules in modipsl/lib folder
355    rm -f ../../lib/intersurf.mod
356    rm -f ../../lib/sechiba.mod
357    rm -f ../../lib/chemistry.mod
358    rm -f ../../lib/liborglob.a
359    rm -f ../../lib/libparallel.a
360    rm -f ../../lib/libsechiba.a
361    rm -f ../../lib/libstomate.a
362    rm -f ../../lib/libparameters.a
363    rm -f ../../lib/liborchidee_ol.a
364    rm -f ../../lib/liborchidee.a
365
366    echo Clean files created during previous compilation of ORCHIDEE done
367
368    exit
369fi
370
371#########################################################################
372# 6. Prepare compilation
373#
374# Add fcm in environement path
375export PATH=${fcm_path}:${PATH}
376
377# Define architecture files
378if [[ "$arch" != "NONE" ]] ; then
379  # First search for file in arch_path folder, if they are not there, search in arch_default_path
380  if [[ -e $arch_path/arch-${arch}.path ]] ; then
381    rm -f arch.path
382    ln -s $arch_path/arch-${arch}.path arch.path
383  elif [[ -e $arch_default_path/arch-${arch}.path ]] ; then
384    rm -f arch.path
385    ln -s $arch_default_path/arch-${arch}.path arch.path
386  fi
387       
388  if [[ -e $arch_path/arch-${arch}.fcm ]] ; then
389    rm -f arch.fcm
390    ln -s $arch_path/arch-${arch}.fcm arch.fcm
391  elif [[ -e $arch_default_path/arch-${arch}.fcm ]] ; then
392    rm -f arch.fcm
393    ln -s $arch_default_path/arch-${arch}.fcm arch.fcm
394  fi
395
396  if [[ -e $arch_path/arch-${arch}.env ]] ; then
397    rm -f arch.env
398    ln -s $arch_path/arch-${arch}.env arch.env
399  elif [[ -e $arch_default_path/arch-${arch}.env ]] ; then
400    rm -f arch.env
401    ln -s $arch_default_path/arch-${arch}.env arch.env
402  else
403    ln -s .void_file arch.env
404  fi
405  source arch.env
406  source arch.path
407else
408  echo "Warning : architecture not specified, taking default file <<arch.fcm>> and <<arch.path>>" 
409  if [[ ! -e arch.fcm ]] ; then
410    echo "architecture file : << arch.fcm >> is missing, exit now...."
411    exit
412  fi
413
414  if [[ -e arch.path ]] ; then
415    source arch.path
416  else
417    echo "architecture file : << arch.path >> is missing, exit now...."
418    exit
419  fi
420
421  if [[ -e arch.env ]] ; then
422    source arch.env
423  fi
424fi
425
426# set compiler flags
427FFLAGS="%BASE_FFLAGS"
428LD_FFLAGS="%BASE_LD"
429CPP_KEY="%FPP_DEF"
430
431# set compiler flags for optimisation
432FFLAGS=${FFLAGS}" "$compile_flags
433LD_FFLAGS=${LD_FFLAGS}" "$compile_flags
434
435# set compiler flags for parallelism
436echo "parallel_mode = "${parallel_mode}
437
438if [[ "$parallel_mode" == "mpi" ]] || [[ "$parallel_mode" == "MPI" ]] ; then
439    FFLAGS="${FFLAGS} %MPI_FFLAGS"
440    LD_FFLAGS="%MPI_LD ${LD_FFLAGS}"
441    CPP_KEY="CPP_PARA ${CPP_KEY}"
442elif [[ "$parallel_mode" == "omp" ]] || [[ "$parallel_mode" == "OMP" ]] ; then
443    FFLAGS="${FFLAGS} %OMP_FFLAGS"
444    LD_FFLAGS="%OMP_LD ${LD_FFLAGS}"
445    CPP_KEY="CPP_OMP CPP_PARA ${CPP_KEY}"
446elif [[ "$parallel_mode" == "mpi_omp" ]] || [[ "$parallel_mode" == "MPI_OMP" ]] ; then
447    FFLAGS="${FFLAGS} %MPI_FFLAGS %OMP_FFLAGS"
448    LD_FFLAGS="%MPI_LD %OMP_LD ${LD_FFLAGS}"
449    CPP_KEY="CPP_OMP CPP_PARA ${CPP_KEY}"
450elif [[ "$parallel_mode" == "none" ]] || [[ "$parallel_mode" == "NONE" ]] || [[ "$parallel_mode" == "seq" ]] ; then
451    echo "Compiling for sequential mode"
452else
453    echo "This option for parallel_mode is not implemeted. Choose between mpi, omp, mpi_omp and none."
454    exit
455fi
456
457#
458# Create some temporary variable to which we add as needed
459#
460INCDIR="$NETCDF_INCDIR $IOIPSL_INCDIR"
461LIBDIR="$NETCDF_LIBDIR $NETCDF_LIB $IOIPSL_LIBDIR $IOIPSL_LIB"
462
463# Do we need to link with XIOS
464#
465if [[ "$xios" == "TRUE" ]] ; then
466    CPP_KEY="XIOS ${CPP_KEY}"
467    INCDIR="${INCDIR} $XIOS_INCDIR"
468    LIBDIR="${LIBDIR} $XIOS_LIBDIR $XIOS_LIB"
469fi
470
471# Check that OASIS has been installed for option to compile the oasis driver in ORCHIDEE
472if [[ "${is_oasisdriver_opt}" == "TRUE" ]] ; then
473    if [ "X"${OASIS_LIBDIR} != "X" ] ; then
474        # Check also if the provided path also exist. If not, delete the option.
475        testdir=$(echo ${OASIS_LIBDIR} | sed -e"s/\-L//")
476        if [ ! -d ${testdir} ]; then
477            echo "OASIS is not existing on the path : $OASIS_LIBDIR"
478            echo "OASIS needs to be installed before compiling the orchideeoasisdriver. Exit now"
479            exit
480        fi
481    else
482        echo "OASIS must be compiled before compiling the oasis driver in ORCHIDEE"
483        echo "OASIS_LIBDIR and OASIS_INCDIR must be set in the arch.path file."
484        echo "Exit now."
485        exit
486    fi
487fi
488
489
490# set target
491TARGET="liborchidee.a"
492if [[ "$is_driver_opt" == "TRUE" ]] ; then
493    TARGET="${TARGET} liborchidee_ol.a dim2_driver.exe orchideedriver.exe"
494fi
495if [[ "$is_other_opt" == "TRUE" ]] ; then
496    TARGET="${TARGET} forcesoil.exe testrouting.exe"
497fi
498
499echo "XXXXXX $is_oasisdriver_opt"
500
501
502if [[ "$is_oasisdriver_opt" == "TRUE" ]] ; then
503    CPP_KEY="OASIS ${CPP_KEY}"
504    TARGET="${TARGET} driver2oasis.exe orchideeoasis.exe"
505    INCDIR="${INCDIR} ${OASIS_INCDIR}"
506    LIBDIR="${LIBDIR} ${OASIS_LIBDIR} ${OASIS_LIB}"
507    echo "OASIS : ${INCDIR}"
508fi
509
510
511if [[ "$linkwithoasis" == "TRUE" ]] ; then
512    LIBDIR="${LIBDIR} ${OASIS_LIBDIR} ${OASIS_LIB}"
513fi
514
515# build config file
516config_fcm="config.fcm"
517rm -f $config_fcm
518touch $config_fcm
519
520echo "%CONFIG_PATH   $config_path"                      >> $config_fcm 
521echo "%ARCH          $arch"                             >> $config_fcm 
522echo "%FFLAGS        $FFLAGS"                           >> $config_fcm 
523echo "%CPP_KEY       $CPP_KEY"                          >> $config_fcm
524echo "%EXEC          $TARGET"                           >> $config_fcm
525echo "%LD_FFLAGS     $LD_FFLAGS"                        >> $config_fcm
526echo "%INCDIR        ${INCDIR}"                         >> $config_fcm
527echo "%LIBDIR        ${LIBDIR}"                         >> $config_fcm
528echo "%EXT_SRC       $ext_src"                          >> $config_fcm
529
530
531# Delete interface module from modipsl/lib directory
532rm -f ../../lib/intersurf.mod
533rm -f ../../lib/sechiba.mod
534
535# Check if compiling is locked
536if [ -f ${config_path}/fcm.bld.lock ] ; then
537    echo "WARNING : build lock file exists"
538    echo "This means that either someone else is compiling this directory right now "
539    echo "or the previous compiling was interrupt abnormally."
540    echo ""
541    echo "Do you whant to remove this file and start compiling? [answer yes/no]" 
542    read answer
543    if [ $answer = "yes" ] || [ $answer = "y" ] ; then
544        rm -f ${config_path}/fcm.bld.lock
545    else
546        echo "Exit now!!!"
547        exit 1
548    fi
549fi
550
551#########################################################################
552# 7. Do the compiling
553fcm build -j $job $full
554err=$?
555
556# Check error message from fcm build
557if [ $err != 0 ] ; then 
558  # ERROR IN COMPILING
559  echo ERROR IN COMPILING ORCHIDEE : $err 
560  exit 1
561fi 
562
563# Create link to bin, lib and inc folders directly in ORCHIDEE folder
564# Use rel_config_path to create link with the relative path
565rm -f bin ; rm -f lib; rm -f inc
566ln -s ${rel_config_path}/bin bin
567ln -s ${rel_config_path}/lib lib
568ln -s ${rel_config_path}/inc inc
569 
570# Copy into modipsl/lib directory libraries and interface module needed by LMDZ
571cp ${config_path}/lib/lib*a          ../../lib/.
572cp ${config_path}/inc/intersurf.mod  ../../lib/.
573cp ${config_path}/inc/sechiba.mod    ../../lib/.
574
575# Move created executables to modipsl/bin directory
576if [ -f ${config_path}/bin/dim2_driver.exe ]    ; then cp -f ${config_path}/bin/dim2_driver.exe ../../bin/orchidee_ol ; fi
577if [ -f ${config_path}/bin/forcesoil.exe ]      ; then cp -f ${config_path}/bin/forcesoil.exe ../../bin/forcesoil ; fi
578if [ -f ${config_path}/bin/orchideedriver.exe ] ; then cp -f ${config_path}/bin/orchideedriver.exe ../../bin/orchideedriver ; fi
579if [ -f ${config_path}/bin/testrouting.exe ]    ; then cp -f ${config_path}/bin/testrouting.exe ../../bin/testrouting ; fi
580if [ -f ${config_path}/bin/driver2oasis.exe ]   ; then cp -f ${config_path}/bin/driver2oasis.exe ../../bin/driver2oasis ; fi
581if [ -f ${config_path}/bin/orchideeoasis.exe ]  ; then cp -f ${config_path}/bin/orchideeoasis.exe ../../bin/orchideeoasis ; fi
582
583
Note: See TracBrowser for help on using the repository browser.