[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnuastro-commits] master 220386cf 6/6: PSF scripts: homogenizing the wa
From: |
Mohammad Akhlaghi |
Subject: |
[gnuastro-commits] master 220386cf 6/6: PSF scripts: homogenizing the way errors and warnings are printed |
Date: |
Mon, 13 Jun 2022 11:18:56 -0400 (EDT) |
branch: master
commit 220386cf8e4bc489c5c075e40f416997b3cec888
Author: Raul Infante-Sainz <infantesainz@gmail.com>
Commit: Mohammad Akhlaghi <mohammad@akhlaghi.org>
PSF scripts: homogenizing the way errors and warnings are printed
Until now, the different PSF scripts have different ways of printing
warning and error messages on the standard output (command-line). Some of
them use the "cat<<EOF [text] EOF" and other scripts use simply "echo
text". However, it is better to print all messages following the same
convention.
With this commit, all messages are printed following the same standard:
"cat<<EOF [text] EOF". Moreover, a label indicating if the message is a
warning (WARNING:) or an error (ERROR:) is also printed at the start of the
message. Errors cause the stop of the execution, while warnings are just
useful information. Warnings are not printed if the user uses the option
'--quiet'.
---
bin/script/psf-scale-factor.in | 24 ++++++++++--------
bin/script/psf-select-stars.in | 50 ++++++++++++++++++++++--------------
bin/script/psf-stamp.in | 57 ++++++++++++++++++++++++++----------------
bin/script/psf-subtract.in | 29 +++++++++++++--------
bin/script/psf-unite.in | 16 +++++++-----
5 files changed, 107 insertions(+), 69 deletions(-)
diff --git a/bin/script/psf-scale-factor.in b/bin/script/psf-scale-factor.in
index 8b627208..e6210920 100644
--- a/bin/script/psf-scale-factor.in
+++ b/bin/script/psf-scale-factor.in
@@ -338,7 +338,7 @@ done
# If an input image is not given at all.
if [ x"$inputs" = x ]; then
cat <<EOF
-$scriptname: no input FITS image files. Run with '--help' for more information
on how to run
+$scriptname: ERROR: no input FITS image files. Run with '--help' for more
information on how to run
EOF
exit 1
elif [ ! -f "$inputs" ]; then
@@ -349,7 +349,7 @@ fi
# If a PSF image (--psf) is not given.
if [ x"$psf" = x ]; then
cat <<EOF
-$scriptname: no PSF image or profile provided. A PSF image (profile) has to be
specified with '--psf' (or '-p').
+$scriptname: ERROR: no PSF image or profile provided. A PSF image (profile)
has to be specified with '--psf' (or '-p').
EOF
exit 1
fi
@@ -357,14 +357,14 @@ fi
# If center coordinates (--center) is not given at all.
if [ x"$center" = x ]; then
cat <<EOF
-$scriptname: no center coordinates provided. You can specify the object's
central coordinate with '--center' ('-c')
+$scriptname: ERROR: no center coordinates provided. You can specify the
object's central coordinate with '--center' ('-c')
EOF
exit 1
else
ncenter=$(echo $center | awk 'BEGIN{FS=","}END{print NF}')
if [ x$ncenter != x2 ]; then
cat <<EOF
-$scriptname: '--center' (or '-c') only take two values, but $ncenter were
given in '$center'
+$scriptname: ERROR: '--center' (or '-c') only take two values, but $ncenter
were given in '$center'
EOF
exit 1
fi
@@ -373,14 +373,14 @@ fi
# If a normalization range is not given at all.
if [ x"$normradii" = x ]; then
cat <<EOF
-$scriptname: no rign of normalization provided. You can use '--normradii'
('-n') to give the radial interval to define normalization
+$scriptname: ERROR: no rign of normalization provided. You can use
'--normradii' ('-n') to give the radial interval to define normalization
EOF
exit 1
else
nnormradii=$(echo $normradii | awk 'BEGIN{FS=","}END{print NF}')
if [ x$nnormradii != x2 ]; then
cat <<EOF
-$scriptname: '--normradii' (or '-n') only takes two values, but $nnormradii
were given
+$scriptname: ERROR: '--normradii' (or '-n') only takes two values, but
$nnormradii were given
EOF
exit 1
fi
@@ -389,7 +389,7 @@ fi
# If mode (--mode) is not given at all.
if [ x"$mode" = x ]; then
cat <<EOF
-$scriptname: no coordinate mode provided. You can use '--mode' (or '-O'),
acceptable values are 'img' (for pixel coordinate) or 'wcs' (for celestial
coordinates)
+$scriptname: ERROR: no coordinate mode provided. You can use '--mode' (or
'-O'), acceptable values are 'img' (for pixel coordinate) or 'wcs' (for
celestial coordinates)
EOF
exit 1
@@ -400,7 +400,7 @@ elif [ "$mode" = wcs -o "$mode" = img ]; then
junk=1
else
cat <<EOF
-$scriptname: wrong value to --mode (-O) provided. Acceptable values are 'img'
(for pixel coordinate) or 'wcs' (for celestial coordinates)
+$scriptname: ERROR: wrong value to --mode (-O) provided. Acceptable values are
'img' (for pixel coordinate) or 'wcs' (for celestial coordinates)
EOF
exit 1
fi
@@ -550,9 +550,11 @@ if [ x"$segment" != x ]; then
# the user is informed of the situation (and that this is a bug: 'clab'
# should be initialized!).
if [ "$clab" = "not-initialized" -o "$olab" = "not-initialized" ]; then
- cat <<EOF
+ if [ x"$quiet" = x ]; then
+ cat <<EOF
$scriptname: WARNING: a bug! Please contact us at 'bug-gnuastro@gnu.org' to
fix the problem. For some reason, no clump or object label could be initialized
for the given coordinate within the given Segment image.
EOF
+ fi
cropped_masked=$cropped
else
@@ -561,10 +563,10 @@ EOF
cropobj=$tmpdir/cropped-objects-$objectid.fits
astcrop $segment --hdu=OBJECTS --mode=img \
--center=$xcenter,$ycenter \
- --width=$xstampwidth,$ystampwidth --output=$cropobj $quiet
+ --width=$stampwidth --output=$cropobj $quiet
astcrop $segment --hdu=CLUMPS --mode=img \
--center=$xcenter,$ycenter \
- --width=$xstampwidth,$ystampwidth --output=$cropclp $quiet
+ --width=$stampwidth --output=$cropclp $quiet
# Mask all the undesired regions.
cropped_masked=$tmpdir/cropped-masked-$objectid.fits
diff --git a/bin/script/psf-select-stars.in b/bin/script/psf-select-stars.in
index 186d1f1f..b7cc1e15 100644
--- a/bin/script/psf-select-stars.in
+++ b/bin/script/psf-select-stars.in
@@ -366,14 +366,17 @@ done
# Basic sanity checks
# ===================
-#
-# If the input image has not been given at all.
+
+# If an input image is not given at all.
if [ x"$inputs" = x ]; then
- echo " $scriptname: no input image file specified."
- echo "Run with '--help' for more information on how to run."
+ cat <<EOF
+$scriptname: ERROR: no input FITS image files (outer part of the PSF to unite
with an inner part). Run with '--help' for more information on how to run
+EOF
exit 1
-elif [ ! -f "$inputs" ]; then
- echo "$scriptname: $inputs: No such file or directory."
+elif [ ! -f $inputs ]; then
+ cat <<EOF
+$scriptname: ERROR: $inputs, no such file or directory
+EOF
exit 1
fi
@@ -384,25 +387,29 @@ if [ x"$segmented" != x ]; then
| wc -l)
if [ $nhdu != 2 ]; then
cat <<EOF
-$scriptname: the file given to '--segmented' does not have 'CLUMPS' and
-'OBJECTS' HDUs. Please give an output from 'astsegment'
+$scriptname: ERROR: the file given to '--segmented' does not have 'CLUMPS' and
'OBJECTS' HDUs. Please give an output from 'astsegment'
EOF
exit 1
fi
elif [ ! -f $segmented ]; then
- echo "$scriptname: $segmented: No such file or directory."
+ cat <<EOF
+$scriptname: ERROR: $segmented, no such file or directory"
+EOF
exit 1
fi
# If the brighter and fainter range of magnitude are not given at all.
if [ x$magnituderange = x ]; then
- echo "$scriptname: no magnitude range provided."
- echo "$scriptname: Values to '--magnituderange' (or '-m') should be
provided."
+ cat<<EOF
+$scriptname: ERROR:no magnitude range provided. Values to '--magnituderange'
(or '-m') should be provided"
+EOF
exit 1
else
nmagrange=$(echo $magnituderange | awk 'BEGIN{FS=","}END{print NF}')
if [ x$nmagrange != x2 ]; then
- echo "$scriptname: '--magnituderange' (or '-m') only take two values,
but $nmagrange were given."
+ cat<<EOF
+$scriptname: ERROR: '--magnituderange' (or '-m') only take two values, but
$nmagrange were given
+EOF
exit 1
fi
fi
@@ -413,7 +420,9 @@ if [ x$parallaxanderrorcolumn = x ]; then
else
nmparallax=$(echo $parallaxanderrorcolumn | awk 'BEGIN{FS=","}END{print
NF}')
if [ x$nmparallax != x2 ]; then
- echo "$scriptname: '--parallaxanderrorcolumn' (or '-p') only take two
values, but $nmparallax were given."
+ cat<<EOF
+$scriptname: ERROR: '--parallaxanderrorcolumn' (or '-p') only take two values,
but $nmparallax were given
+EOF
exit 1
else
columnquery=$racolumn,$deccolumn,$field,$parallaxanderrorcolumn
@@ -422,22 +431,25 @@ fi
# If the minimum axis ratio is not given at all.
if [ x$minaxisratio = x ]; then
- echo "$scriptname: no minimum axis ratio provided."
- echo "$scriptname: Value to '--minaxisratio' (or '-Q') should be provided."
+ cat<<EOF
+$scriptname: ERROR: no minimum axis ratio provided. Value to '--minaxisratio'
(or '-Q') should be provided
+EOF
exit 1
fi
# If the minimum distance between contaminants is not given at all.
if [ x$mindistdeg = x ]; then
- echo "$scriptname: no minimum distance (for rejecting neighbors) provided.
"
- echo "$scriptname: value to '--mindistdeg' (or '-M') should be provided."
+ cat<<EOF
+$scriptname: ERROR: no minimum distance (for rejecting neighbors) provided.
Value to '--mindistdeg' (or '-M') should be provided
+EOF
exit 1
fi
# If the match aperture radius is not given at all.
if [ x$matchaperturedeg = x ]; then
- echo "$scriptname: no aperture matching radius provided."
- echo "$scripname: value to '--matchaperturedeg' (or '-a') should be
provided."
+ cat<<EOF
+$scriptname: ERROR: no aperture matching radius provided. Value to
'--matchaperturedeg' (or '-a') should be provided
+EOF
exit 1
fi
diff --git a/bin/script/psf-stamp.in b/bin/script/psf-stamp.in
index a2bc47d6..0fe86ecb 100644
--- a/bin/script/psf-stamp.in
+++ b/bin/script/psf-stamp.in
@@ -351,11 +351,13 @@ done
# If an input image is not given at all.
if [ x"$inputs" = x ]; then
cat <<EOF
-$scriptname: no input FITS image files. Run with '--help' for more information
on how to run
+$scriptname: ERROR: no input FITS image files (outer part of the PSF to unite
with an inner part). Run with '--help' for more information on how to run
EOF
exit 1
-elif [ ! -f "$inputs" ]; then
- echo "$scriptname: $inputs: No such file or directory"
+elif [ ! -f $inputs ]; then
+ cat <<EOF
+$scriptname: ERROR: $inputs, no such file or directory
+EOF
exit 1
fi
@@ -373,14 +375,16 @@ if [ x"$center" = x ]; then
# The center has been computed in pixels, assume pixel coordinates mode
mode=img
+ if [ x"$quiet" = x ]; then
cat <<EOF
-$scriptname: warning: no center provided ('--center' or '-c'). Considering
that the center of the image is $xcoord,$ycoord
+$scriptname: WARNING: no center provided ('--center' or '-c'). Considering
that the center of the image is $xcoord,$ycoord
EOF
+ fi
else
ncenter=$(echo $center | awk 'BEGIN{FS=","}END{print NF}')
if [ x$ncenter != x2 ]; then
cat <<EOF
-$scriptname: '--center' (or '-c') only take two values, but $ncenter were
given in '$center'
+$scriptname: ERROR: '--center' (or '-c') only take two values, but $ncenter
were given in '$center'
EOF
exit 1
fi
@@ -398,34 +402,39 @@ if [ x"$stampwidth" = x ]; then
if [ x"$xsizetype" = xeven ]; then
xstampwidth=$(echo $xsize | awk '{print $1+1}')
- cat <<EOF
-$scriptname: warning: the image along the first dimension (NAXIS1) has an even
number of pixels ($xsize). This may cause some problems with the centering of
the stamp. Please, check and consider providing an image with an odd number of
pixels
+ if [ x"$quiet" = x ]; then
+ cat <<EOF
+$scriptname: WARNING: the image along the first dimension (NAXIS1) has an even
number of pixels ($xsize). This may cause some problems with the centering of
the stamp. Please, check and consider providing an image with an odd number of
pixels
EOF
+ fi
elif [ x"$xsizetype" = xodd ]; then
xstampwidth=$xsize
else
cat <<EOF
-$scriptname: warning: the size of the image along the first dimension (NAXIS1)
can not be obtained
+$scriptname: ERROR: the size of the image along the first dimension (NAXIS1)
can not be obtained
EOF
exit 1
fi
if [ x"$ysizetype" = xeven ]; then
ystampwidth=$(echo $ysize | awk '{print $1+1}')
- cat <<EOF
-$scriptname: warning: the image along the second dimension (NAXIS2) has an
even number of pixels ($ysize). This may cause some problems with the centering
of the stamp. Please, check and consider providing an image with an odd number
of pixels
+ if [ x"$quiet" = x ]; then
+ cat <<EOF
+$scriptname: WARNING: the image along the second dimension (NAXIS2) has an
even number of pixels ($ysize). This may cause some problems with the centering
of the stamp. Please, check and consider providing an image with an odd number
of pixels
EOF
+ fi
elif [ x"$ysizetype" = xodd ]; then
ystampwidth=$ysize
else
cat <<EOF
-$scriptname: warning: the size of the image along the second dimension
(NAXIS2) can not be obtained
+$scriptname: ERROR: the size of the image along the second dimension (NAXIS2)
can not be obtained
EOF
exit 1
fi
- cat <<EOF
-$scriptname: warning: no stamp width provided (--stampwidth or -W).
Considering that the stamp width is $xstampwidth x $ystampwidth.
+ if [ x"$quiet" = x ]; then
+ cat <<EOF
+$scriptname: WARNING: no stamp width provided ('--stampwidth' or '-W').
Considering that the stamp width is $xstampwidth x $ystampwidth
EOF
-
+ fi
else
nstampwidth=$(echo $stampwidth | awk 'BEGIN{FS=","}END{print NF}')
if [ x$nstampwidth != x2 ]; then
@@ -441,14 +450,16 @@ fi
# If a normalization range is not given at all.
if [ x"$normradii" = x ]; then
- cat <<EOF
-$scriptname: warning: no ring of normalization provided (--normradii). The
stamp won't be normalized
+ if [ x"$quiet" = x ]; then
+ cat <<EOF
+$scriptname: WARNING: no ring of normalization provided ('--normradii' or
'-n'). The stamp won't be normalized
EOF
+ fi
else
nnormradii=$(echo $normradii | awk 'BEGIN{FS=","}END{print NF}')
if [ x$nnormradii != x2 ]; then
cat <<EOF
-$scriptname: '--normradii' (or '-n') only take two values, but $nnormradii
were given in '$normradii'
+$scriptname: ERROR: '--normradii' (or '-n') only take two values, but
$nnormradii were given in '$normradii'
EOF
exit 1
fi
@@ -464,7 +475,7 @@ if [ "$mode" = wcs -o $mode = "img" ]; then
junk=1
else
cat <<EOF
-$scriptname: value to '--mode' (or '-O') is not recognized ('$mode'). This
option takes one of the following two values: 'img' (for pixel coordinates) or
'wcs' (for celestial coordinates)
+$scriptname: ERROR: value to '--mode' (or '-O') is not recognized ('$mode').
This option takes one of the following two values: 'img' (for pixel
coordinates) or 'wcs' (for celestial coordinates)
EOF
exit 1
fi
@@ -473,8 +484,8 @@ fi
-# Define a temporal directory and thefinal output file
-# ----------------------------------------------------
+# Define a temporal directory and the final output file
+# -----------------------------------------------------
#
# Construct the temporary directory. If the user does not specify any
# directory, then a default one with the base name of the input image will
@@ -614,7 +625,7 @@ EOF
# Mask all the undesired regions.
cropped_masked=$tmpdir/cropped-masked-$objectid.fits
- astarithmetic $cropped --hdu=1 set-i --output=$cropped_masked \
+ astarithmetic $cropped --hdu=1 set-i --output=$cropped_masked $quiet \
$cropobj --hdu=1 set-o \
$cropclp --hdu=1 set-c \
\
@@ -714,9 +725,11 @@ astfits $output --write=NORMVAL,$normvalue,"Normalization
value" \
# script) because we dont want it to be mixed with the outputs of the
# previus commands.
if [ $normvalue = nan ]; then
- cat <<EOF
+ if [ x"$quiet" = x ]; then
+ cat <<EOF
$scriptname: WARNING: all the pixels in the requested normalization radius are
NaN. Therefore the output stamp will be fully NaN. When you use this stamp with
any stack operator of 'astsrithmetic' (for making the PSF) this image will
effectively be ignored
EOF
+ fi
fi
diff --git a/bin/script/psf-subtract.in b/bin/script/psf-subtract.in
index 01b23373..ab030adc 100644
--- a/bin/script/psf-subtract.in
+++ b/bin/script/psf-subtract.in
@@ -324,29 +324,33 @@ done
# If an input image is not given at all.
if [ x"$inputs" = x ]; then
cat <<EOF
-$scriptname: no input FITS image files. Run with '--help' for more information
on how to run
+$scriptname: ERROR: no input FITS image files. Run with '--help' for more
information on how to run
EOF
exit 1
elif [ ! -f $inputs ]; then
- echo "$scriptname: $inputs: No such file or directory."
+ cat <<EOF
+$scriptname: ERROR: $inputs, no such file or directory
+EOF
exit 1
fi
# If a PSF image (--psf) is not given at all.
if [ x"$psf" = x ]; then
cat <<EOF
-$scriptname: no PSF image provided. The PSF image should be provided with
'--psf' ('-p').
+$scriptname: ERROR: no PSF image provided. The PSF image should be provided
with '--psf' (or '-p')
EOF
exit 1
elif [ ! -f $psf ]; then
- echo "$scriptname: $psf: No such file or directory."
+ cat <<EOF
+$scriptname: ERROR: $psf, no such file or directory
+EOF
exit 1
fi
# If a scale factor (--scale) is not given at all.
if [ x"$scale" = x ]; then
cat <<EOF
-$scriptname: no scale factor provided. It can be given with '--scale' (or
'-s'). You can derive this value with the 'astscript-psf-model-scale-factor'
+$scriptname: ERROR: no scale factor provided. It has to be given with
'--scale' (or '-s'). You can derive this value with the
'astscript-psf-model-scale-factor'
EOF
exit 1
fi
@@ -354,28 +358,31 @@ fi
# If center coordinates (--center) is not given at all.
if [ x"$center" = x ]; then
cat <<EOF
-$scriptname: no center coordinates provided (for the star that should be
subtracted). You can use '--center' ('-c').
+$scriptname: ERROR: no center coordinates provided (for the star that should
be subtracted). You can use '--center' ('-c')
EOF
exit 1
else
ncenter=$(echo $center | awk 'BEGIN{FS=","}END{print NF}')
if [ x$ncenter != x2 ]; then
- echo "$scriptname: '--center' (or '-c') only takes two values, but
$ncenter were given."
+ cat <<EOF
+$scriptname: ERROR: $scriptname: '--center' (or '-c') only takes two values,
but $ncenter were given
+EOF
exit 1
fi
fi
-
# If mode (--mode) is not given at all.
-modeerrorinfo="Depending on the nature of the star's coordinates, please give
either 'img' (for pixel coordinates) or 'wcs' (for RA,Dec) to the '--mode' (or
'-O') option."
+modeerrorinfo="Depending on the nature of the star's coordinates, please give
either 'img' (for pixel coordinates) or 'wcs' (for RA,Dec) to the '--mode' (or
'-O') option"
if [ x"$mode" = x ]; then
- echo "$scriptname: no coordinate mode provided! $modeerrorinfo"
+ cat <<EOF
+$scriptname: ERROR: no coordinate mode provided. $modeerrorinfo
+EOF
exit 1
# Make sure the value to '--mode' is either 'wcs' or 'img'.
elif [ "$mode" = wcs -o "$mode" = img ]; then
junk=1
else
cat <<EOF
-$scriptname: '$mode' not acceptable for '--mode' (or '-O'). $modeerrorinfo
+$scriptname: ERROR: '$mode' not acceptable for '--mode' (or '-O').
$modeerrorinfo
EOF
exit 1
fi
diff --git a/bin/script/psf-unite.in b/bin/script/psf-unite.in
index 42921097..279066d4 100644
--- a/bin/script/psf-unite.in
+++ b/bin/script/psf-unite.in
@@ -327,29 +327,33 @@ done
# If an input image is not given at all.
if [ x"$inputs" = x ]; then
cat <<EOF
-$scriptname: no input FITS image files (outer part of the PSF to unite with an
inner part). Run with '--help' for more information on how to run
+$scriptname: ERROR: no input FITS image files (outer part of the PSF to unite
with an inner part). Run with '--help' for more information on how to run
EOF
exit 1
elif [ ! -f $inputs ]; then
- echo "$scriptname: $inputs: No such file or directory."
+ cat <<EOF
+$scriptname: ERROR: $inputs, no such file or directory
+EOF
exit 1
fi
# If an inner image (--inner) is not given at all.
if [ x"$inner" = x ]; then
cat <<EOF
-$scriptname: no inner FITS image provided. The inner part of the PSF (to unite
with the outer part, which is the main argument) can be specified with the
'--inner' (or '-i') option as a FITS image
+$scriptname: ERROR: no inner FITS image provided. The inner part of the PSF
(to unite with the outer part, which is the main argument) can be specified
with the '--inner' (or '-i') option as a FITS image
EOF
exit 1
elif [ ! -f "$inner" ]; then
- echo "$scriptname: $inner: No such file or directory."
+ cat <<EOF
+$scriptname: ERROR: $inner, no such file or directory
+EOF
exit 1
fi
# If a radius (--radius) is not given at all.
if [ x"$radius" = x ]; then
cat <<EOF
-$scriptname: no radius (in pixels) provided. All pixels below this radius will
be filled with the inner PSf image. You can use '--radius' (or '-r') to specify
it
+$scriptname: ERROR: no radius (in pixels) provided. All pixels below this
radius will be filled with the inner PSf image. You can use '--radius' (or
'-r') to specify it
EOF
exit 1
fi
@@ -357,7 +361,7 @@ fi
# If a scale (--scale) is not given at all.
if [ x"$scale" = x ]; then
cat <<EOF
-$scriptname: no scale factor provided ('--scale' or '-s'). This is necessary
to scale the inner region to the outer and is usually determined with the
'astscript-psf-model-scale-factor'. See the Gnuastro tutorial on "Building the
extended PSF" for more
+$scriptname: ERROR: no scale factor provided ('--scale' or '-s'). This is
necessary to scale the inner region to the outer and is usually determined with
the 'astscript-psf-model-scale-factor'. See the Gnuastro tutorial on "Building
the extended PSF" for more
EOF
exit 1
fi
- [gnuastro-commits] master updated (3edaaeec -> 220386cf), Mohammad Akhlaghi, 2022/06/13
- [gnuastro-commits] master 19a69ef4 1/6: psf-stamp: assuming a centered position by default, Mohammad Akhlaghi, 2022/06/13
- [gnuastro-commits] master d69373b9 2/6: psf-stamp: keeping meta-data into the output image header, Mohammad Akhlaghi, 2022/06/13
- [gnuastro-commits] master 220386cf 6/6: PSF scripts: homogenizing the way errors and warnings are printed,
Mohammad Akhlaghi <=
- [gnuastro-commits] master cac338b0 3/6: psf-stamp: same output stamp size than the input image by default, Mohammad Akhlaghi, 2022/06/13
- [gnuastro-commits] master 7279c9c0 5/6: PSF scripts: removing the --corewidth option to simplify the scripts, Mohammad Akhlaghi, 2022/06/13
- [gnuastro-commits] master b54d9711 4/6: Configuration: checking if static libraries can be built, Mohammad Akhlaghi, 2022/06/13