pyodide/tools/buildf2c

315 lines
6.1 KiB
Bash
Executable File

#!/bin/sh
# Based on http://hpc.sourceforge.net/buildf2c with curl replaced by wget
############################################################
# This UNIX script builds the f2c FORTRAN --> C translator #
# under Mac OS X. #
# Make this script executable with "chmod +x buildf2c" #
############################################################
echo "==================================="
echo "Build f2c FORTRAN --> C translator."
echo "==================================="
echo "USAGE: ./buildf2c"
######################################
# Set trap to allow abort on signal: #
######################################
trap 'echo "Interrupted by signal" >&2; exit' 1 2 3 15
########################################################
# 1. Download f2c source from Bell Labs. #
# (Tar file is not visible - it's created on the fly.) #
########################################################
echo "--------------------------------------------"
echo "1. Downloading f2c source from Bell Labs ..."
echo "--------------------------------------------"
# wget --passive-ftp ftp://netlib.bell-labs.com/netlib/f2c.tar
wget http://hpc.sourceforge.net/f2c.tar -O "f2c.tar"
echo "... done."
#####################################
# 2. Uncompress f2c tarred archive: #
#####################################
echo "-------------------------------"
echo "2. Uncompressing f2c source ..."
echo "-------------------------------"
tar -xvf f2c.tar
gunzip -rf f2c/*
(cd f2c && unzip libf2c.zip -d libf2c)
echo "... done."
###############################################################
# 3. Prepare the unix makefiles for building the f2c library. #
# Note: CC compiler switched from 'cc' to '/usr/bin/cc' #
###############################################################
echo "-------------------------------------------"
echo "3. Preparing makefiles for building f2c ..."
echo "-------------------------------------------"
sed 's/CC = cc/CC = \/usr\/bin\/cc/' f2c/libf2c/makefile.u > f2c/libf2c/makefile
sed 's/CC = cc/CC = \/usr\/bin\/cc/' f2c/src/makefile.u > f2c/src/makefile
echo "... done."
##########################################
# 4. Create and install f2c header file. #
# If you use a C++ compiler: make hadd #
# Otherwise: make f2c.h #
##########################################
echo "----------------------------------------------------"
echo "4. Creating and installing f2c header file f2c.h ..."
echo "----------------------------------------------------"
cd f2c/libf2c || exit
make f2c.h
if test ! -d /usr/local/include; then
mkdir -p /usr/local/include
fi
cp f2c.h /usr/local/include/
echo "... done."
################################################
# 5. Create and install f2c library "libf2c.a" #
################################################
echo "-----------------------------------------------------"
echo "5. Creating and installing f2c library \"libf2c.a\" ..."
echo "-----------------------------------------------------"
make
if test ! -d /usr/local/lib; then
mkdir -p /usr/local/lib
fi
cp libf2c.a /usr/local/lib/
ranlib /usr/local/lib/libf2c.a
echo "... done."
######################################
# 6. Make executable f2c translator: #
######################################
echo "---------------------------------------------"
echo "6. Creating and installing f2c translator ..."
echo "---------------------------------------------"
cd ../src || exit
gcc -o xsum xsum.c
make veryclean
make f2c
if test ! -d /usr/local/bin; then
mkdir -p /usr/local/bin
fi
cp f2c /usr/local/bin/
echo "... done."
################################################################
# 7. Install fc script: #
# #
# 1. Remove "-Olimit 2000" in the -O processing options within #
# the 'fc' script. #
# 2. Eliminate all references to the math library (-lm) in #
# the script 'fc' since it is included the System framework #
# and is linked by default under Mac OS X. #
# 3. Eliminate '-u MAIN__' at the bottom of the 'fc' script. #
# You will have to explicitly load FORTRAN MAIN programs #
# (explicitly mention the relevant .f or .o file). #
################################################################
echo "---------------------------"
echo "7. Installing fc script ..."
echo "---------------------------"
# shellcheck disable=SC2103
cd ..
mv "fc" fc.orig
sed 's/ -Olimit 2000//g; s/ -lm//g; s/ -u MAIN__//g' fc.orig > "fc"
chmod +x "fc"
cp "fc" /usr/local/bin/
echo "... done."
#########################
# 8. Install man pages: #
#########################
echo "---------------------------"
echo "8. Installing man pages ..."
echo "---------------------------"
cp f2c.1t /usr/share/man/man1/f2c.1
echo "... done."
################
# 9. Clean up: #
################
echo "------------------"
echo "9. Cleaning up ..."
echo "------------------"
cd src || exit
make clean
cd ../libf2c || exit
make clean
cd ../..
echo "... All done!"
#############################################
# 10. Test f2c on your FORTRAN source code: #
#############################################
echo "======================================================"
echo "======================================================"
echo "======================================================"
echo " === To test f2c on your FORTRAN source code: ==="
echo " === cd ~/wherever/your/code/is ==="
echo " === 1. f2c myprog.f ==="
echo " === cc -O -o myprog.exe myprog.c -lf2c ==="
echo " === myprog.exe ==="
echo " === 2. fc -O -w -o myprog.exe myprog.f ==="
echo " === myprog.exe ==="
echo "======================================================"
echo "======================================================"
echo "======================================================"
exit