0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

macOSへのwgrib2 v3.1.3のインストール

Last updated at Posted at 2024-11-20

はじめに

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-xexport FC=gfortran-xx には、先ほど確認したメジャーバージョンを入力する。

~/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

参考文献

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?