From 7c5196c87bafd6303310e2a2633c860015119b55 Mon Sep 17 00:00:00 2001 From: webisu Date: Mon, 16 Dec 2024 14:38:41 -0500 Subject: [PATCH] PR#295 update shared lib fixes --- docs/README.clang | 26 +------ docs/README.g2clib | 45 ++++++------ docs/README.gcc | 2 +- docs/README.ipolates | 23 +++++++ docs/README.jpeg2000 | 46 ++----------- docs/README.ncep | 57 +-------------- docs/README.netcdf3 | 8 --- docs/README.netcdf4 | 59 +++------------- docs/README.openmp | 25 +++---- docs/README.questions | 15 ++++ docs/README.shared_library | 15 ++-- wgrib2/CMakeLists.txt | 44 +++++++----- wgrib2/gctpc/source/Makefile | 130 ----------------------------------- 13 files changed, 129 insertions(+), 366 deletions(-) delete mode 100644 docs/README.netcdf3 create mode 100644 docs/README.questions delete mode 100755 wgrib2/gctpc/source/Makefile diff --git a/docs/README.clang b/docs/README.clang index 5b07d3c8..b2968080 100644 --- a/docs/README.clang +++ b/docs/README.clang @@ -23,29 +23,5 @@ you are using an old version of RedHat or Ubuntu, it is probably time to update to a newer version. AOCC will work on intel cpus. - https://developer.amd.com/amd-aocc/ +Only the AOCC version of the clang compilers are tested. (12/2024) -To compile with AOCC - export CC=clang - export FC=flang - make - -To compile for Zen3 with AOCC - export CC=clang - export FC=flang - export CFFLAGS=-march=znversion3 - export FFLAGS=-march=znversion3 - make - -AOCC: Jasper does not compile correctly. Use OpenJPEG to support jpeg2000. - OpenJPEG requires Cmake - - USE_JASPER=0 - USE_OPENJPEG=1 - -Netcdf4 does not compile correctly. Must use - - USE_NETCDF3=1 - USE_NETCDF4=0 - -Shared libraries work on linux (Ubuntu 20.04LTS) diff --git a/docs/README.g2clib b/docs/README.g2clib index 0f033b89..17297b2a 100644 --- a/docs/README.g2clib +++ b/docs/README.g2clib @@ -1,29 +1,30 @@ - Changes for wgrib2 v0.1.9.8 revised 9.2017 + Wgrib2 & g2clib (g2c) -Wgrib2 v0.1.9.8 changes the default decoders from g2clib to an emulation -of g2clib using the internal decoders. The g2clib decoders are now an -optional package. -The change was precipitated by reports of segmentation faults. The -problem was finally traced back to a repository of precompiled programs. -They were compiling wgrib2 using a precompiled official version of g2clib. -This was bad because the official version of g2clib did not have -the bug fixes included with the wgrib2 source code (since fixed). -In addition the g2clib is often compiled with a weird makefile. On 64-bit -systems, the library API uses 32-bit integers. However, on 32-bit systems, -the library API uses 64-bit integers. (Wgrib2 was using the opposite -convention.) +wgrib2 v0.1.9.8 change the default decoders from g2clib to an emulation + of g2clib using the internal decoders. To enable the + g2clib decoder, use the option "-g2clib 1". +wgrib2 v0.1.9.9 The g2clib decoders are now an optional package. + +wgrib2 v3.5.0 The routines that handled the png, jpeg2000 compression + were originally from g2clib. The wgrib2 improvements to + to the routines have been ported back to g2clib. With + move of the wgrib2 source code to github, it is easier to + use the github version of g2c and only have one copy of + the routines to maintain. + + So to build wgrib2, you need to have g2c installed. However, + the USE_G2CLIB enable the optional use of the g2c decoders. + As before, the g2c encoders are not used. - Changes for wgrib2 v0.1.9.9 -The default configuration is not to include the g2clib decoders in the build. WMO Standard The g2clib and g2lib libraries do not follow the WMO standard when encoding -and decoding non-zero constant fields when the decimal scaling is not zero . +and decoding non-zero constant fields when the decimal scaling is not zero. This is a known problem for several years. The post-processor developers at NCEP work around the problem when encoding a constant field so the problem is not commonly encountered. @@ -37,7 +38,11 @@ this problem is avoided. Wgrib2 internal routines either follow the WMO standard or the g2clib/g2lib behavior on non-zero constant fields with a non-zero decimal scaling. The -default for wgrib2 to emulate the g2clib/g2lib bug for NCEP files. However, -if a non-zero constant field with a non-zero decimal scaling is encountered, -a warning message is given. - +default for wgrib2 to emulate the g2clib/g2lib bug for reading NCEP files. +However, if wgrib2 has to emulate the bug, a warning message is given. +(NCEP file has the center id set to 7.) For writing (not copying), wgrib2 +writes grib data in a manner that is WMO compliant and can be read correctly +by g2clib/g2lib. + + copying: wgrib2 IN.grb -match "HGT" -grib hgt.grb + writing: wgrib2 IN.grb -match "HGT" -grib_out hgt.grb diff --git a/docs/README.gcc b/docs/README.gcc index 9fc2c2d3..355aeb22 100644 --- a/docs/README.gcc +++ b/docs/README.gcc @@ -1,4 +1,4 @@ gnu: default development compilers -If you compile without OPENMP (the default), then you will see warnings +If you compile without OPENMP, then you will see warnings about Ignoring #pragma omp .... This is normal. diff --git a/docs/README.ipolates b/docs/README.ipolates index 081a9612..3cf6cfd3 100644 --- a/docs/README.ipolates +++ b/docs/README.ipolates @@ -1,3 +1,26 @@ + IPOLATES: 12/2024 + +Wgrib2 v3.5.0 now uses NCEPLIB:ip v5.1+. This means the the ip +library is now current, maintained and supported by the NCEPlibs +team. Believe or not "supported" is actually an important word! +With the older IP grib1 and IP grib2 libraries, high priority support +was for operational codes and a lower priority for internal users. + +IP v5.1 adds (1) standard C interface to fortran codes in IP, and +support for NCEP and WMO defined rotated lat-lon grids. + +Wgrib2 v3.5.0 drops the suport for older grib1 and grib2 IP libraries. +Otherwise, the use of the ipolates library remains the same as +default the double-precision grib2 IP library. + +The spectral library is included with NCEPLIB:ip and their no +longer an option to use the IPlib without including the SPlib. +(SP wass originally not included because some SPlib was of unknown +origin. 10 years later, the major code was identified as open +source, and the minor code was simple recoded.) + +----------------------------------------------------------------- + IPOLATES: grid interpolation library 8/2018 IPOLATES is a fortran library from NCEP that interpolates between diff --git a/docs/README.jpeg2000 b/docs/README.jpeg2000 index 86e15cc8..e51d114c 100644 --- a/docs/README.jpeg2000 +++ b/docs/README.jpeg2000 @@ -2,53 +2,21 @@ Jpeg2000 produces one of the smallest grib files. The problem with -jpeg2000 is that the open source libraries are single threaded and -the algorithm is involved. As a result, encoding and decoding -jpeg2000 is slow. NCEP has adopted complex-packing for most of its -models output because of the speed of decoding. Parallelized decoders -can by up to 20 times faster. +jpeg2000 was that the opensource jpeg2000 were slow, and decoding +jpeg2000 was up to 20x slower than complex packing. Consequently +NCEP has adopted complex-packing for most of its models output because +of the speed of decoding. Support for jpeg2000 compressed grib files can be enabled by compiling -wgrib2 with either the Japser or OpenJPEG library. Currently the -default is the Jasper library. +wgrib2 to use either the Japser or OpenJPEG library. Jasper: Pro: long-term use by wgrib2 - no need for CMake - similar perforance to OpenJPEG most people use Jasper - compiles on my linux box at work (no cmake) - Jasper is used by NCEP operational codes - Con: support is not as good as OpenJPEG (subjective) - doesn't work on clang, icc, arm (?) - - default up to wgrib2 v3.1.2 + Historically supported by fewer compilers. (current?) OpenJPEG: Pro: better suport than Jasper (subjective) similar performance to Jasper - haven't found a C compiler that can't compile - - Con: fewer builds using OpenJPEG - minor: requires CMake - - default for wgrib2 v3.1.3+ - the AEC library used by ECMWF requires CMake, - so using CMake for OpenJPEG is not a big deal. - - -Wgrib2 v3.1.3+ transitions from Jasper to OpenJPEG for jpeg2000 support. -My automated testing says that Jasper and OpenJPEG produce files that have -the same decoded values. - - - To Compile With OpenJPEG - - -requires cmake v3.9+ and g++ to be installed -wgrib2/decenc_jpeg.c is based on ECMWF code and licensed under - the terms of the Apache Licence Version 2.0 -To enable, edit grib2/makefile - USE_JASPER=0 - USE_OPENJPEG=1 +status 12/2024: github 3.5.0 can use either library. diff --git a/docs/README.ncep b/docs/README.ncep index e6c2302e..7b7fe1ea 100644 --- a/docs/README.ncep +++ b/docs/README.ncep @@ -1,57 +1,6 @@ -How do I configure the makefile to support the ncep local defined rotated lat-lon grid -edit grib2/makefile - USE_IPOLATES=1 - USE_SPECTRAL=0 + How to build on an NCEP machine -How do I configure the makefile to support the WMO defined rotated lat-lon grid -edit grib2/makefile (default) - USE_IPOLATES=3 - USE_SPECTRAL=1 +The current wgrib2 now lives on github + https://github.com/NOAA-EMC/wgrib2 -How do I configure the makefile to support netcdf4? -edit grib2/makefile - USE_NETCDF3=0 - USE_NETCDF4=1 -Note: you will be prompted to download the netcdf4 and hdf5 libraries -in order to complete the make. - - -How do I compile on NCEP's WCOSS2 system - -export CC=icc -export FC=ifort -export COMP_SYS=intel_linux -make -(fails) -cp lib64/*.a lib/ -make - -comment: WCOSS2 has altered how libraries are compiled using configure. -Normally libraries are built in lib/; however, a local routine puts the -libraries in lib64/. Since this behavor has only been observed in -WCOSS2, no fixes to the makefile ar planned. - - -How do I compile on NCEP's workstations - -edit grib2/makefile -cd (whatever)/grib2 -vi makefile -change -USE_AEC=1 -to -USE_AEC=0 -change -USE_JASPER=0 -to -USE_JASPER=1 -change -USE_OPENJPEG=1 -to -USE_OPENJPEG=0 - -(from bash) -export CC=gcc -export FC=gfortran -make diff --git a/docs/README.netcdf3 b/docs/README.netcdf3 deleted file mode 100644 index c21d88b1..00000000 --- a/docs/README.netcdf3 +++ /dev/null @@ -1,8 +0,0 @@ -Compiling wgrib2 with netcdf3 on a 32-bit OS is problematical. -The compile fails when the netcdf does a self test. This problem -has been observed with cygwin and 32-bit ubuntu 13.04. Note -that 64-bit Ubuntu 12.04 and 13.04 work fine. - -Sugested work around. Compile with netcdf4 support. - - diff --git a/docs/README.netcdf4 b/docs/README.netcdf4 index 610b1fe6..31d54881 100644 --- a/docs/README.netcdf4 +++ b/docs/README.netcdf4 @@ -1,55 +1,16 @@ Compiling wgrib2 with netcdf-4 -9/2022: wgrib2 v3.1.2beta3 - compiles in Ubuntu 20.04LTS gcc 9.4.0 - compiles in RedHat release 7.9 gcc 4.8.5 - does not compile (hdf5) with AMD clang version 13.0.0 -4/2022: netcdf4 seems to be working gcc v9.4.0. clang is a no go. -I am trying to compile on cygwin but it has been compiling for 3 hours. +With the github version of wgrib2, you have to use the system version of netcdf4. +To install netcdf under Ubuntu, I did -8/2020: + used synaptic to install libnetcdf-dev .. installs many packages + sudo apt install netcdf-bin .. need ncdump to pass tests -NetCDF4 support has been in shambles for many years. The good news, -Redhat with its vintage compilers has been working fine. If you -are using the Intel compilers, it compiles and probably works. +To build wgrib2 with netcdf, you modify the top level CMakeLists.txt +from + option(USE_NETCDF "Use NetCDF" off) +to + option(USE_NETCDF "Use NetCDF" on) - -Support: There is no way to support using XYZ compiler in ABC operating -system. The user has to test whether their copy of wgrib2 with the NetCDF4 -options works. Don't assume that "it compiled" means "it worked". I have -seen "it compiled" but "it doesn't work". The NetCDF4 code seems to be -robust but the hdf5 library is sensitive to the version of the compiler. - -Configuration: - -In the makefile, change the configuration to - -USE_NETCDF3=0 -USE_NETCDF4=1 - - -Then you have to set the environment variables to the C and F90 compilers -and run gnu make. - -(bash example) - -export CC=gcc (set the C compiler) -export FC=gfortran (set the f90 compiler) -make (on some machines this gnu make could be called gmake) - -The make will respond with an error message that you need to get the netcdf4 source code. -You can get the source code using wget. - -make (on some machines this gnu make could be called gmake) - -The make will respond with another error message that you need to get the hdf5 source code. -You can get the source code using wget. - -make (third time is a charm) - - -This has been tested with gcc/gfortran and clang/gfortran on Ubuntu 12.04 (64 bits) and -with gcc/fortran on Redhat 5 and 6 (64-bits). - -Notes: UCAR has a web page with help in compiling netcdf. +and build normally. diff --git a/docs/README.openmp b/docs/README.openmp index 36619348..14e882ce 100644 --- a/docs/README.openmp +++ b/docs/README.openmp @@ -1,4 +1,4 @@ - OpenMP revised 7.2016, 1.2020, 10.2023 + OpenMP revised 7.2016, 1.2020, 10.2023, 12.2024 OpenMP is a shared-memory parallel-programming API. As the grid dimensions get larger, the need for parallel computing becomes more important. With OpenMP, wgrib2 will use @@ -13,24 +13,25 @@ You can control the number of cores used by the environment variable OMP_NUM_THR Status: requires OpenMP v3.1 or greater wgrib2 v3.1.3: allows code to be written for SIMD and GPUs - only SIMD is present in v3.1.3 - + SIMD used in in wgrib2 v3.1.3; however, only in the few + places. Limited to SIMD loops inside of threaded loops. + Short loops should parallelized by SIMD to avoid the + OpenMP overhead. Hints: complex-packing reading is parallelized - complex-packing writing is partly parallelized. + complex-packing writing is slightly parallelized. simple-packing is parallelized jpeg2000, png, AEC are not parallelized because they depends on external libraries - geolocation is parallelized except when using Proj4. + (jpeg2000 may have some parallelizations depending on libraries used) + geolocation is parallelized except when using Proj. Running multiple copies of wgrib2 can be done along with OpenMP. Nodes with 24+ cores should have environment variable OMP_NUM_THREADS set to - a number less than the number of cores. Little perforance gain for + a number less than the number of free cores. Little perforance gain for a large number of cores. NUMA should be considered. wgrib2ms/wgrib2mv is faster than using wgrib2 with OpenMP. really fast: wgrib2ms/wgrib2mv with AEC compression - -Future: - wgrib2 allows writting SIMD and GPU code through OpenMP pragmas. - Wgrib2 is frequently I/O bound, and the run time is usually quite fast. - So speeding up wgrib2 will have little impact. Consider writing - SIMD and gpu code for wgrib2 an exercise on non-trivial code. + Most sections of wgrib2 do not scale well over a handfull of cores; + however, a couple of codes (-ens_processing) is both computationally + intensive, and hightly parallelized and it can use as many cores + as you give it. diff --git a/docs/README.questions b/docs/README.questions new file mode 100644 index 00000000..c1f114c1 --- /dev/null +++ b/docs/README.questions @@ -0,0 +1,15 @@ + How to submit questions? + +Questions are now handled by github + +https://github.com/NOAA-EMC/wgrib2 + +Select the issue tab. You might want to see if the +problem has been previously addressed. + +Why do you want to submit questions by github vs the old way? + - multiple people can answer + - you can help train these muiltiple people + (only one is an experienced wgrib2 user) + - solved issues are documented and can help others + diff --git a/docs/README.shared_library b/docs/README.shared_library index 0658c5a6..3af0efe4 100644 --- a/docs/README.shared_library +++ b/docs/README.shared_library @@ -1,16 +1,9 @@ Shared Library -Channge grib2/makefile from +Make sure the top level CMakeLists.txt have - MAKE_SHARED_LIB=0 -to +option(BUILD_LIB "Build wgrib2 library?" on) +option(BUILD_SHARED_LIB "Build shared library?" on) - MAKE_SHARED_LIB=1 - -Then compile the library by (bash version) - - $ export CC=(your C compiler) - $ export FC=(your fortran compiler .. if used) - $ export COMP_SYS=(whatever) this is usually optional - $ make lib +and build as usual diff --git a/wgrib2/CMakeLists.txt b/wgrib2/CMakeLists.txt index 9e1d0068..b2e64c17 100644 --- a/wgrib2/CMakeLists.txt +++ b/wgrib2/CMakeLists.txt @@ -3,14 +3,6 @@ # # Kyle Gerheiser, Edward Hartnett, Wesley Ebisuzaki # -# if BUILD_SHARED_LIB -# ftn_api -> shared library, interface to fortran -# wgrib2_lib -> shared (includes gctpc) -# -# if !BUILD_SHARED_LIB -# ftn_api -> static library, interface to fortran -# wgrib2_lib -> static library includeing gctpc -# # note: in wgrib2 v3.1.3 or earlier, all the libraries # incuding aec, jasper, etc were included with the wgrib2 library # in github version, it is different. @@ -83,7 +75,8 @@ configure_file ( if(BUILD_LIB) if(BUILD_SHARED_LIB) - add_library(wgrib2_lib SHARED ${lib_src} ) + # add_library(wgrib2_lib SHARED ${lib_src} ) + add_library(wgrib2_lib SHARED ${lib_src} $ ) set_property(TARGET wgrib2_lib PROPERTY POSITION_INDEPENDENT_CODE ON) else() add_library(wgrib2_lib STATIC ${lib_src} $ ) @@ -93,13 +86,15 @@ if(BUILD_LIB) # library and executable have same name (wgrib2) but different target names set_target_properties(wgrib2_lib PROPERTIES OUTPUT_NAME wgrib2) - # target_compile_definitions(wgrib2_lib PRIVATE CALLABLE_WGRIB2) endif() - add_executable(wgrib2_exe wgrib2_main.c) set_target_properties(wgrib2_exe PROPERTIES OUTPUT_NAME wgrib2) +# link in math library +target_link_libraries(wgrib2_exe PRIVATE m) + + if(USE_NETCDF) target_link_libraries(obj_lib PUBLIC NetCDF::NetCDF_C) if(BUILD_SHARED_LIB) @@ -110,6 +105,9 @@ endif() if(USE_PNG) target_link_libraries(obj_lib PUBLIC PNG::PNG) + if (BUILD_LIB) + target_link_libraries(wgrib2_lib PUBLIC PNG::PNG) + endif() endif() if(USE_OPENMP) @@ -121,7 +119,9 @@ endif() if(USE_IPOLATES) target_link_libraries(obj_lib PUBLIC ip::ip_d) - target_link_libraries(wgrib2_exe PUBLIC ip::ip_d) + if (BUILD_LIB) + target_link_libraries(wgrib2_lib PUBLIC ip::ip_d) + endif() # Link to the Fortran runtime library for each compiler if using ip2. # The wgrib2 exectuable is created using the C compiler and @@ -137,15 +137,25 @@ endif() ## target_link_libraries(obj_lib PUBLIC gctpc -lm) # Link to gctpc directly because object libraries do not link transitively -target_link_libraries(wgrib2_exe PRIVATE gctpc -lm) +# target_link_libraries(wgrib2_exe PRIVATE gctpc -lm) +target_link_libraries(wgrib2_exe PRIVATE gctpc) +# target_link_libraries(wgrib2_lib PRIVATE gctpc) +# target_link_libraries(obj_lib PRIVATE gctpc) if(USE_AEC) - target_link_libraries(wgrib2_exe PRIVATE ${LIBAEC_LIBRARIES}) + # target_link_libraries(wgrib2_exe PRIVATE ${LIBAEC_LIBRARIES}) + target_link_libraries(obj_lib PRIVATE ${LIBAEC_LIBRARIES}) + if (BUILD_LIB) + target_link_libraries(wgrib2_lib PRIVATE ${LIBAEC_LIBRARIES}) + endif() endif() -if(USE_JASPER OR USE_OPENJPEG) +if(USE_JASPER OR USE_OPENJPEG OR USE_G2CLIB) target_link_libraries(obj_lib PUBLIC g2c::g2c) - target_link_libraries(wgrib2_exe PRIVATE g2c::g2c) + if (BUILD_LIB) + target_link_libraries(wgrib2_lib PUBLIC g2c::g2c) + endif() +# target_link_libraries(wgrib2_exe PRIVATE g2c::g2c) endif() target_link_libraries(wgrib2_exe PRIVATE obj_lib) @@ -153,7 +163,7 @@ target_link_libraries(wgrib2_exe PRIVATE obj_lib) if(BUILD_LIB) set(headers wgrib2_api.h wgrib2.h ${CMAKE_BINARY_DIR}/wgrib2/wgrib2_meta.h) - target_link_libraries(wgrib2_lib PUBLIC gctpc -lm) +## target_link_libraries(wgrib2_lib PUBLIC gctpc) set_target_properties(wgrib2_lib PROPERTIES PUBLIC_HEADER "${headers}") target_compile_definitions(wgrib2_lib PUBLIC ${definitions_list}) diff --git a/wgrib2/gctpc/source/Makefile b/wgrib2/gctpc/source/Makefile deleted file mode 100755 index a2620f1f..00000000 --- a/wgrib2/gctpc/source/Makefile +++ /dev/null @@ -1,130 +0,0 @@ - -INCDIR = -ARCHIVE = geolib.a -LIBDIR = -SRCDIR = . -INCS = cproj.h proj.h -CC = cc - -OBJECTS= \ - $(ARCHIVE)(alberfor.o) $(ARCHIVE)(alberinv.o) \ - $(ARCHIVE)(alconfor.o) $(ARCHIVE)(alconinv.o) \ - $(ARCHIVE)(azimfor.o) $(ARCHIVE)(aziminv.o) \ - $(ARCHIVE)(eqconfor.o) $(ARCHIVE)(eqconinv.o) \ - $(ARCHIVE)(equifor.o) $(ARCHIVE)(equiinv.o) \ - $(ARCHIVE)(gnomfor.o) $(ARCHIVE)(gnominv.o) \ - $(ARCHIVE)(goodfor.o) $(ARCHIVE)(goodinv.o) \ - $(ARCHIVE)(gvnspfor.o) $(ARCHIVE)(gvnspinv.o) \ - $(ARCHIVE)(hamfor.o) $(ARCHIVE)(haminv.o) \ - $(ARCHIVE)(imolwfor.o) $(ARCHIVE)(imolwinv.o) \ - $(ARCHIVE)(lamazfor.o) $(ARCHIVE)(lamazinv.o) \ - $(ARCHIVE)(lamccfor.o) $(ARCHIVE)(lamccinv.o) \ - $(ARCHIVE)(merfor.o) $(ARCHIVE)(merinv.o) \ - $(ARCHIVE)(millfor.o) $(ARCHIVE)(millinv.o) \ - $(ARCHIVE)(molwfor.o) $(ARCHIVE)(molwinv.o) \ - $(ARCHIVE)(obleqfor.o) $(ARCHIVE)(obleqinv.o) \ - $(ARCHIVE)(omerfor.o) $(ARCHIVE)(omerinv.o) \ - $(ARCHIVE)(orthfor.o) $(ARCHIVE)(orthinv.o) \ - $(ARCHIVE)(polyfor.o) $(ARCHIVE)(polyinv.o) \ - $(ARCHIVE)(psfor.o) $(ARCHIVE)(psinv.o) \ - $(ARCHIVE)(robfor.o) $(ARCHIVE)(robinv.o) \ - $(ARCHIVE)(sinfor.o) $(ARCHIVE)(sininv.o) \ - $(ARCHIVE)(somfor.o) $(ARCHIVE)(sominv.o) \ - $(ARCHIVE)(sterfor.o) $(ARCHIVE)(sterinv.o) \ - $(ARCHIVE)(stplnfor.o) $(ARCHIVE)(stplninv.o) \ - $(ARCHIVE)(tmfor.o) $(ARCHIVE)(tminv.o) \ - $(ARCHIVE)(utmfor.o) $(ARCHIVE)(utminv.o) \ - $(ARCHIVE)(vandgfor.o) $(ARCHIVE)(vandginv.o) \ - $(ARCHIVE)(wivfor.o) $(ARCHIVE)(wivinv.o) \ - $(ARCHIVE)(wviifor.o) $(ARCHIVE)(wviiinv.o) \ - $(ARCHIVE)(for_init.o) $(ARCHIVE)(inv_init.o) \ - $(ARCHIVE)(cproj.o) $(ARCHIVE)(report.o) \ - $(ARCHIVE)(paksz.o) $(ARCHIVE)(sphdz.o) \ - $(ARCHIVE)(untfz.o) $(ARCHIVE)(gctp.o) \ - $(ARCHIVE)(br_gctp.o) - -SOURCES = gctp.c alberfor.c alberinv.c alconfor.c alconinv.c azimfor.c \ - aziminv.c eqconfor.c eqconinv.c equifor.c equiinv.c gnomfor.c \ - gnominv.c goodfor.c goodinv.c gvnspfor.c gvnspinv.c hamfor.c \ - haminv.c imolwfor.c imolwnv.c lamazfor.c lamazinv.c merfor.c \ - merinv.c millfor.c millinv.c molwfor.c molwinv.c obleqfor.c \ - obleqinv.c omerfor.c omerinv.c orthfor.c orthinv.c polyfor.c \ - polyinv.c psfor.c psinv.c robfor.c robinv.c sinfor.c sininv.c \ - somfor.c sominv.c sterfor.c sterinv.c stplnfor.c stplninv.c \ - tmfor.c tminv.c utmfor.c utminv.c vandgfor.c vandginv.c \ - wivfor.c wivinv.c wviifor.c wviiinv.c for_init.c inv_init.c \ - cproj.c report.c lamccfor.c lamccinv.c paksz.c untfz.c sphdz.c \ - br_gctp.c Makefile cproj.h proj.h - -$(ARCHIVE): $(OBJECTS) - - -$(ARCHIVE)(gctp.o): $(INCS) -$(ARCHIVE)(alberfor.o): $(INCS) -$(ARCHIVE)(alberinv.o): $(INCS) -$(ARCHIVE)(alconfor.o): $(INCS) -$(ARCHIVE)(alconinv.o): $(INCS) -$(ARCHIVE)(azimfor.o): $(INCS) -$(ARCHIVE)(aziminv.o): $(INCS) -$(ARCHIVE)(eqconfor.o): $(INCS) -$(ARCHIVE)(eqconinv.o): $(INCS) -$(ARCHIVE)(equifor.o): $(INCS) -$(ARCHIVE)(equiinv.o): $(INCS) -$(ARCHIVE)(for_init.o): $(INCS) -$(ARCHIVE)(gnomfor.o): $(INCS) -$(ARCHIVE)(gnominv.o): $(INCS) -$(ARCHIVE)(goodfor.o): $(INCS) -$(ARCHIVE)(goodinv.o): $(INCS) -$(ARCHIVE)(gvnspfor.o): $(INCS) -$(ARCHIVE)(gvnspinv.o): $(INCS) -$(ARCHIVE)(hamfor.o): $(INCS) -$(ARCHIVE)(haminv.o): $(INCS) -$(ARCHIVE)(imolwfor.o): $(INCS) -$(ARCHIVE)(imolwinv.o): $(INCS) -$(ARCHIVE)(inv_init.o): $(INCS) -$(ARCHIVE)(lamazfor.o): $(INCS) -$(ARCHIVE)(lamazinv.o): $(INCS) -$(ARCHIVE)(lamccfor.o): $(INCS) -$(ARCHIVE)(lamccinv.o): $(INCS) -$(ARCHIVE)(merfor.o): $(INCS) -$(ARCHIVE)(merinv.o): $(INCS) -$(ARCHIVE)(millfor.o): $(INCS) -$(ARCHIVE)(millinv.o): $(INCS) -$(ARCHIVE)(molwfor.o): $(INCS) -$(ARCHIVE)(molwinv.o): $(INCS) -$(ARCHIVE)(obleqfor.o): $(INCS) -$(ARCHIVE)(obleqinv.o): $(INCS) -$(ARCHIVE)(omerfor.o): $(INCS) -$(ARCHIVE)(omerinv.o): $(INCS) -$(ARCHIVE)(orthfor.o): $(INCS) -$(ARCHIVE)(orthinv.o): $(INCS) -$(ARCHIVE)(paksz.o): $(INCS) -$(ARCHIVE)(polyinv.o): $(INCS) -$(ARCHIVE)(polyfor.o): $(INCS) -$(ARCHIVE)(psinv.o): $(INCS) -$(ARCHIVE)(psfor.o): $(INCS) -$(ARCHIVE)(robinv.o): $(INCS) -$(ARCHIVE)(robfor.o): $(INCS) -$(ARCHIVE)(sininv.o): $(INCS) -$(ARCHIVE)(sinfor.o): $(INCS) -$(ARCHIVE)(sominv.o): $(INCS) -$(ARCHIVE)(somfor.o): $(INCS) -$(ARCHIVE)(sphdz.o): $(INCS) -$(ARCHIVE)(sterinv.o): $(INCS) -$(ARCHIVE)(sterfor.o): $(INCS) -$(ARCHIVE)(stplninv.o): $(INCS) -$(ARCHIVE)(stplnfor.o): $(INCS) -$(ARCHIVE)(tminv.o): $(INCS) -$(ARCHIVE)(tmfor.o): $(INCS) -$(ARCHIVE)(utminv.o): $(INCS) -$(ARCHIVE)(utmfor.o): $(INCS) -$(ARCHIVE)(untfz.o): $(INCS) -$(ARCHIVE)(vandginv.o): $(INCS) -$(ARCHIVE)(vandgfor.o): $(INCS) -$(ARCHIVE)(wivinv.o): $(INCS) -$(ARCHIVE)(wivfor.o): $(INCS) -$(ARCHIVE)(wviiinv.o): $(INCS) -$(ARCHIVE)(wviifor.o): $(INCS) -$(ARCHIVE)(cproj.o): $(INCS) -$(ARCHIVE)(report.o): $(INCS) -$(ARCHIVE)(br_gctp.o): $(INCS)