はじめに
wgrib2 は、GRIB2ファイルを操作するプログラムで、アメリカ海洋大気庁(NOAA)を構成するアメリカ国立気象局(NWS)の国立環境予測センター(NCEP)が配布しています。
wgrib2をmacOSにインストールする場合、ダウンロードしたファイルをそのままコンパイルしてもうまくいきません。本記事では、2024年11月現在の最新版である v3.1.3
をインストールする方法をまとめます。
実行環境:macOS Sequoia 15.1.1
なお、本記事は wgrib2 v3 系の macOS 上でのコンパイルエラーをパッチで解決する を参考にし、そのままでは実行時にエラーとなる箇所などを修正しました。
準備
Homebrew経由で、GCCをインストールする。
~
❯ brew install gcc
インストールが完了したら、
~
❯ gfortran -v
と入力すると、一番下の行に
gcc version x.y.z (Homebrew GCC x.y.z)
と表示されるので、メジャーバージョン(上の例では x
)を確認する。
NCEPからwgrib2をダウンロードする
~
❯ mkdir tmp
~
❯ cd tmp
~/tmp
❯ wget https://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/wgrib2.tgz
~/tmp
❯ tar xfz wgrib2.tgz
~/tmp
❯ cp -R grib2/ grib2.orig/
パッチを当てる
makefileに対するパッチ
~/tmp
❯ vi grib2.diff
以下のファイルを作成する。
export CC=gcc-x
と export FC=gfortran-x
の x
には、先ほど確認したメジャーバージョンを入力する。
~/tmp/grib2.diff
diff -ur grib2.orig/makefile grib2/makefile
--- grib2.orig/makefile
+++ grib2/makefile
@@ -153,7 +153,7 @@
# Main development platform: linux with gcc/gfortran
#
-# export CC=gcc
+export CC=gcc-x
-# export FC=gfortran
+export FC=gfortran-x
#
-SHELL=/bin/sh
+SHELL=/bin/bash
# SHELL=/bin/ksh
@@ -194,5 +194,5 @@
USE_G2CLIB=0
-USE_PNG=1
+USE_PNG=0
USE_JASPER=0
-USE_OPENJPEG=1
+USE_OPENJPEG=0
USE_AEC=1
@@ -421,7 +421,7 @@
netcdf4CPPFLAGS+=-Wall -Wmissing-prototypes -Wold-style-definition -Werror=format-security -O3
hdf5CFLAGS+=-Wall -Wmissing-prototypes -Wold-style-definition -O1
ifeq ($(need_ftn),1)
- wLDFLAGS+=-lgfortran
+ wLDFLAGS+=-L$(shell gfortran -print-search-dirs | grep libraries | sed 's/^.*=//;s/:/ -L/g') -lgfortran
wCPPFLAGS+=-DGFORTRAN
wFFLAGS+=-c -O3
FTN_REAL8:="-fdefault-real-8 -fdefault-double-8"
@@ -1006,9 +1006,9 @@
${pnglib}: ${zlib} ${pngdir}
# for OSX
-# export LDFLAGS="-L${lib}" && cd "${pngdir}" && export CPPFLAGS="${wCPPFLAGS}" && ${MAKE} -f scripts/makefile.darwin
+ export LDFLAGS="-L${lib}" && cd "${pngdir}" && export CPPFLAGS="${wCPPFLAGS}" && ${MAKE} -f scripts/makefile.darwin
# for everybody else
# export LDFLAGS="-L${lib}" && cd "${pngdir}" && export CFLAGS="-DPNG_USER_WIDTH_MAX=200000000L -I${cwd}/include" ${PIC_option}" && ./configure --disable-shared --prefix=${cwd} --exec-prefix=${cwd} && ${MAKE} check install
- export LDFLAGS="-L${lib}" && cd "${pngdir}" && export CPPFLAGS="-DPNG_USER_WIDTH_MAX=200000000L -I${cwd}/include ${PIC_option}" && ./configure --disable-shared --prefix=${cwd} --exec-prefix=${cwd} && ${MAKE} check install
+# export LDFLAGS="-L${lib}" && cd "${pngdir}" && export CPPFLAGS="-DPNG_USER_WIDTH_MAX=200000000L -I${cwd}/include ${PIC_option}" && ./configure --disable-shared --prefix=${cwd} --exec-prefix=${cwd} && ${MAKE} check install
作成したら、パッチを当てる。
~/tmp
❯ patch -p0 < grib2.diff
Jasperに対するパッチ
~/tmp
❯ cd grib2
~/tmp/grib2
❯ tar xfz jasper-1.900.1-14ubuntu3.2.debian.tgz
~/tmp/grib2
❯ cp -R grib2/ grib2.orig/
~/tmp/grib2
❯ vi ../jasper.diff
以下のファイルを作成する。
~/tmp/jasper.diff
diff -ur jasper-1.900.1.orig/src/libjasper/base/jas_getopt.c jasper-1.900.1/src/libjasper/base/jas_getopt.c
--- jasper-1.900.1.orig/src/libjasper/base/jas_getopt.c
+++ jasper-1.900.1/src/libjasper/base/jas_getopt.c
@@ -77,6 +77,7 @@
#include "jasper/jas_getopt.h"
#include "jasper/jas_math.h"
+#include "jasper/jas_debug.h"
/******************************************************************************\
* Global data.
diff -ur jasper-1.900.1.orig/src/libjasper/bmp/bmp_dec.c jasper-1.900.1/src/libjasper/bmp/bmp_dec.c
--- jasper-1.900.1.orig/src/libjasper/bmp/bmp_dec.c
+++ jasper-1.900.1/src/libjasper/bmp/bmp_dec.c
@@ -77,6 +77,7 @@
#include "jasper/jas_stream.h"
#include "jasper/jas_image.h"
#include "jasper/jas_malloc.h"
+#include "jasper/jas_debug.h"
#include "bmp_cod.h"
diff -ur jasper-1.900.1.orig/src/libjasper/jpc/jpc_t1dec.c jasper-1.900.1/src/libjasper/jpc/jpc_t1dec.c
--- jasper-1.900.1.orig/src/libjasper/jpc/jpc_t1dec.c
+++ jasper-1.900.1/src/libjasper/jpc/jpc_t1dec.c
@@ -78,6 +78,7 @@
#include "jasper/jas_fix.h"
#include "jasper/jas_stream.h"
#include "jasper/jas_math.h"
+#include "jasper/jas_debug.h"
#include "jpc_bs.h"
#include "jpc_mqdec.h"
diff -ur jasper-1.900.1.orig/src/libjasper/jpc/jpc_tsfb.c jasper-1.900.1/src/libjasper/jpc/jpc_tsfb.c
--- jasper-1.900.1.orig/src/libjasper/jpc/jpc_tsfb.c
+++ jasper-1.900.1/src/libjasper/jpc/jpc_tsfb.c
@@ -119,6 +119,9 @@
free(tsfb);
}
+int jpc_tsfb_analyze2(jpc_tsfb_t *tsfb, int *a, int xstart, int ystart,
+ int width, int height, int stride, int numlvls);
+
int jpc_tsfb_analyze(jpc_tsfb_t *tsfb, jas_seq2d_t *a)
{
return (tsfb->numlvls > 0) ? jpc_tsfb_analyze2(tsfb, jas_seq2d_getref(a,
@@ -146,6 +149,9 @@
return 0;
}
+int jpc_tsfb_synthesize2(jpc_tsfb_t *tsfb, int *a, int xstart, int ystart,
+ int width, int height, int stride, int numlvls);
+
int jpc_tsfb_synthesize(jpc_tsfb_t *tsfb, jas_seq2d_t *a)
{
return (tsfb->numlvls > 0) ? jpc_tsfb_synthesize2(tsfb,
diff -ur jasper-1.900.1.orig/src/libjasper/jpg/jpg_dummy.c jasper-1.900.1/src/libjasper/jpg/jpg_dummy.c
--- jasper-1.900.1.orig/src/libjasper/jpg/jpg_dummy.c
+++ jasper-1.900.1/src/libjasper/jpg/jpg_dummy.c
@@ -69,6 +69,7 @@
#include "jasper/jas_stream.h"
#include "jasper/jas_image.h"
#include "jasper/jas_string.h"
+#include "jasper/jas_debug.h"
#include "jpg_cod.h"
diff -ur jasper-1.900.1.orig/src/libjasper/mif/mif_cod.c jasper-1.900.1/src/libjasper/mif/mif_cod.c
--- jasper-1.900.1.orig/src/libjasper/mif/mif_cod.c
+++ jasper-1.900.1/src/libjasper/mif/mif_cod.c
@@ -70,6 +70,7 @@
#include "jasper/jas_image.h"
#include "jasper/jas_string.h"
#include "jasper/jas_malloc.h"
+#include "jasper/jas_debug.h"
#include "mif_cod.h"
diff -ur jasper-1.900.1.orig/src/libjasper/pnm/pnm_dec.c jasper-1.900.1/src/libjasper/pnm/pnm_dec.c
--- jasper-1.900.1.orig/src/libjasper/pnm/pnm_dec.c
+++ jasper-1.900.1/src/libjasper/pnm/pnm_dec.c
@@ -79,6 +79,7 @@
#include "jasper/jas_types.h"
#include "jasper/jas_stream.h"
#include "jasper/jas_image.h"
+#include "jasper/jas_debug.h"
#include "pnm_cod.h"
作成したら、パッチを当てる。
~/tmp/grib2
❯ patch -p0 < ../jasper.diff
コンパイルする
~/tmp/grib2
❯ make
インストールする
~/tmp/grib2
❯ sudo install wgrib2/wgrib2 /opt/local/bin
インストールされたことを確認する
~
❯ wgrib2 -version
v3.1.3 10/2023 Wesley Ebisuzaki, Reinoud Bokhorst, John Howard, Jaakko Hyvätti, Dusan Jovic, Daniel Lee, Kristian Nilssen, Karl Pfeiffer, Pablo Romero, Manfred Schwarb, Gregor Schee, Arlindo da Silva, Niklas Sondell, Sam Trahan, George Trojan, Sergey Varlamov
参考文献