From c8470bce898d97ad4ae1a376530ef7dfb978e58b Mon Sep 17 00:00:00 2001 From: Ansgar Wehrhahn Date: Tue, 8 Dec 2020 15:01:19 +0100 Subject: [PATCH] Update make.yml --- .github/workflows/make.yml | 232 +++++++++++++++++++------------------ libf2c/makefile.u | 219 ++++++++++++++++++++++++++++++++++ 2 files changed, 341 insertions(+), 110 deletions(-) create mode 100644 libf2c/makefile.u diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index 82cd67e..f3459f9 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -13,46 +13,58 @@ jobs: outputs: upload_url: ${{ steps.create_release.outputs.upload_url }} steps: - - name: GitHub Tag - id: tag_release - # You may pin to the exact commit or the version. - # uses: mathieudutour/github-tag-action@1bab3ab0712cafa42b54c512453487b89bb06504 - uses: mathieudutour/github-tag-action@v5 - with: - # Required for permission to tag the repo. - github_token: ${{ secrets.GITHUB_TOKEN }} - # Which type of bump to use when none explicitly provided (default: `patch`). - # default_bump: # optional, default is patch - - - name: Create Release - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token - with: - tag_name: ${{ steps.tag_release.outputs.new_tag }} - release_name: Release ${{ steps.tag_release.outputs.new_tag }} - draft: false - prerelease: false - + - name: GitHub Tag + id: tag_release + # You may pin to the exact commit or the version. + # uses: mathieudutour/github-tag-action@1bab3ab0712cafa42b54c512453487b89bb06504 + uses: mathieudutour/github-tag-action@v5 + with: + # Required for permission to tag the repo. + github_token: ${{ secrets.GITHUB_TOKEN }} + # Which type of bump to use when none explicitly provided (default: `patch`). + # default_bump: # optional, default is patch + + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token + with: + tag_name: ${{ steps.tag_release.outputs.new_tag }} + release_name: Release ${{ steps.tag_release.outputs.new_tag }} + draft: false + prerelease: false + manylinux-build: needs: [create_release] runs-on: ubuntu-latest strategy: + fail-fast: false matrix: include: - - name: manylinux2010-gfortran + - name: manylinux2014-gfortran compiler: gfortran - container: quay.io/pypa/manylinux2010_x86_64 - - name: manylinux2010-f2c + container: quay.io/pypa/manylinux2014_x86_64 + - name: manylinux2014-f2c compiler: f2c - container: quay.io/pypa/manylinux2010_x86_64 - + container: quay.io/pypa/manylinux2014_x86_64 + container: ${{ matrix.container }} steps: # We need to install packages first, because the checkout needs gcc already - - run: yum install -y gcc-gfortran f2c cmake autoconf automake libtool - run: git clone https://github.com/AWehrhahn/SMElib . + - name: Install F2C & Compile libf2c.a + if: matrix.compiler == 'f2c' + run: | + yum install -y f2c wget + cd libf2c + wget https://www.netlib.org/f2c/libf2c.zip + unzip libf2c.zip -d f2c + cd f2c + cp ../makefile.u Makefile + make + cp libf2c.a /usr/local/lib64/ + cd ../.. - name: Replace Makefile if: matrix.compiler == 'f2c' run: rm Makefile.am && mv Makefile_f2c.am Makefile.am @@ -64,18 +76,18 @@ jobs: - run: zip -r ${{ matrix.name }} lib share - name: Upload Release Asset - id: upload-release-asset + id: upload-release-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - upload_url: ${{ needs.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps + upload_url: ${{ needs.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps asset_path: ./${{ matrix.name }}.zip asset_name: ${{ matrix.name }}.zip asset_content_type: application/zip - + build: - needs: create_release + needs: create_release strategy: fail-fast: false matrix: @@ -95,14 +107,14 @@ jobs: f77: x86_64-w64-mingw32-gfortran config_flags: --build=x86_64-pc-linux-gnu --host=x86_64-w64-mingw32 outputs: bin share -# F2C doesn't work for Windows, use gfortran instead -# will figure this out when possible -# - name: windows-f2c -# runs_on: ubuntu-latest -# packages: f2c mingw-w64 mingw-w64-tools mingw-w64-common gcc-mingw-w64 gcc-mingw-w64-x86-64 g++-mingw-w64 g++-mingw-w64-x86-64 -# cxx: x86_64-w64-mingw32-gcc -# config_flags: --build=x86_64-pc-linux-gnu --host=x86_64-w64-mingw32 -# outputs: bin share + # F2C doesn't work for Windows, use gfortran instead + # will figure this out when possible + # - name: windows-f2c + # runs_on: ubuntu-latest + # packages: f2c mingw-w64 mingw-w64-tools mingw-w64-common gcc-mingw-w64 gcc-mingw-w64-x86-64 g++-mingw-w64 g++-mingw-w64-x86-64 + # cxx: x86_64-w64-mingw32-gcc + # config_flags: --build=x86_64-pc-linux-gnu --host=x86_64-w64-mingw32 + # outputs: bin share - name: macos-gfortran runs_on: macos-latest packages: automake libtool @@ -115,7 +127,7 @@ jobs: packages: automake libtool cxx: gcc-9 outputs: lib share - + # The CMake configure and build commands are platform agnostic and should work equally # well on Windows or Mac. You can convert this to a matrix build if you need # cross-platform coverage. @@ -123,72 +135,72 @@ jobs: runs-on: ${{ matrix.runs_on }} steps: - - uses: actions/checkout@v2 - - - name: Install packages - if: matrix.runs_on == 'ubuntu-latest' - run: sudo apt-get install -y ${{ matrix.packages }} - - - name: Install packages - if: matrix.runs_on == 'macos-latest' - run: brew tap ${{ matrix.taps }} && brew install ${{ matrix.packages }} - - - name: Install F2C - if: matrix.name == 'macos-f2c' - run: brew install --verbose --HEAD franklinchen/tap/f2c - - - name: Run F2C - if: matrix.name == 'ubuntu-f2c' || matrix.name == 'windows-f2c' || matrix.name == 'macos-f2c' - run: f2c -w -a -C++ -Nn1604 -Nq1200 -dsrc/eos/ src/eos/*.f & f2c -w -a -C++ -dsrc/sme/ src/sme/*.f - - - name: Replace Makefile.am - if: matrix.name == 'ubuntu-f2c' || matrix.name == 'windows-f2c' - run: rm Makefile.am && mv Makefile_f2c.am Makefile.am - - - name: Replace Makefile.am - if: matrix.name == 'macos-f2c' - run: rm Makefile.am && mv Makefile_mac.am Makefile.am - - - name: Copy F2C headers - if: matrix.name == 'windows-f2c' - run: cp /usr/include/f2c.h src/eos/ & cp /usr/include/f2c.h src/sme/ - - - name: Run Bootstrap and Configure - env: - CXX: ${{ matrix.cxx }} - F77: ${{ matrix.f77 }} - run: ./bootstrap && ./configure --prefix=$PWD ${{ matrix.config_flags }} - - - name: Install - env: - CXX: ${{ matrix.cxx }} - F77: ${{ matrix.f77 }} - run: make install - - - name: Zip data # This would actually build your project, using zip for an example artifact - run: zip -r ${{ matrix.name }} ${{ matrix.outputs }} - - - name: Archive compiled library - uses: actions/upload-artifact@v2 - with: - name: library - path: ${{ matrix.name }}.zip - - - name: Prepare Test Environment - if: matrix.name != 'windows-gfortran' && matrix.name != 'windows-f2c' - run: pip3 install -r test/requirements.txt - - - name: Test Library - if: matrix.name != 'windows-gfortran' && matrix.name != 'windows-f2c' - run: python3 -m pytest - - - name: Upload Release Asset - id: upload-release-asset - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ needs.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps - asset_path: ./${{ matrix.name }}.zip - asset_name: ${{ matrix.name }}.zip - asset_content_type: application/zip + - uses: actions/checkout@v2 + + - name: Install packages + if: matrix.runs_on == 'ubuntu-latest' + run: sudo apt-get install -y ${{ matrix.packages }} + + - name: Install packages + if: matrix.runs_on == 'macos-latest' + run: brew tap ${{ matrix.taps }} && brew install ${{ matrix.packages }} + + - name: Install F2C + if: matrix.name == 'macos-f2c' + run: brew install --verbose --HEAD franklinchen/tap/f2c + + - name: Run F2C + if: matrix.name == 'ubuntu-f2c' || matrix.name == 'windows-f2c' || matrix.name == 'macos-f2c' + run: f2c -w -a -C++ -Nn1604 -Nq1200 -dsrc/eos/ src/eos/*.f & f2c -w -a -C++ -dsrc/sme/ src/sme/*.f + + - name: Replace Makefile.am + if: matrix.name == 'ubuntu-f2c' || matrix.name == 'windows-f2c' + run: rm Makefile.am && mv Makefile_f2c.am Makefile.am + + - name: Replace Makefile.am + if: matrix.name == 'macos-f2c' + run: rm Makefile.am && mv Makefile_mac.am Makefile.am + + - name: Copy F2C headers + if: matrix.name == 'windows-f2c' + run: cp /usr/include/f2c.h src/eos/ & cp /usr/include/f2c.h src/sme/ + + - name: Run Bootstrap and Configure + env: + CXX: ${{ matrix.cxx }} + F77: ${{ matrix.f77 }} + run: ./bootstrap && ./configure --prefix=$PWD ${{ matrix.config_flags }} + + - name: Install + env: + CXX: ${{ matrix.cxx }} + F77: ${{ matrix.f77 }} + run: make install + + - name: Zip data # This would actually build your project, using zip for an example artifact + run: zip -r ${{ matrix.name }} ${{ matrix.outputs }} + + - name: Archive compiled library + uses: actions/upload-artifact@v2 + with: + name: library + path: ${{ matrix.name }}.zip + + - name: Prepare Test Environment + if: matrix.name != 'windows-gfortran' && matrix.name != 'windows-f2c' + run: pip3 install -r test/requirements.txt + + - name: Test Library + if: matrix.name != 'windows-gfortran' && matrix.name != 'windows-f2c' + run: python3 -m pytest + + - name: Upload Release Asset + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps + asset_path: ./${{ matrix.name }}.zip + asset_name: ${{ matrix.name }}.zip + asset_content_type: application/zip diff --git a/libf2c/makefile.u b/libf2c/makefile.u new file mode 100644 index 0000000..fd73e05 --- /dev/null +++ b/libf2c/makefile.u @@ -0,0 +1,219 @@ +# Unix makefile: see README. +# For C++, first "make hadd". +# If your compiler does not recognize ANSI C, add +# -DKR_headers +# to the CFLAGS = line below. +# On Sun and other BSD systems that do not provide an ANSI sprintf, add +# -DUSE_STRLEN +# to the CFLAGS = line below. +# On Linux systems, add +# -DNON_UNIX_STDIO +# to the CFLAGS = line below. For libf2c.so under Linux, also add +# -fPIC +# to the CFLAGS = line below. + +.SUFFIXES: .c .o +CC = cc +SHELL = /bin/sh +CFLAGS = -O -fPIC -DNON_UNIX_STDIO + +# compile, then strip unnecessary symbols +.c.o: + $(CC) -c -DSkip_f2c_Undefs $(CFLAGS) $*.c + ld -r -x -o $*.xxx $*.o + mv $*.xxx $*.o +## Under Solaris (and other systems that do not understand ld -x), +## omit -x in the ld line above. +## If your system does not have the ld command, comment out +## or remove both the ld and mv lines above. + +MISC = f77vers.o i77vers.o main.o s_rnge.o abort_.o exit_.o getarg_.o iargc_.o\ + getenv_.o signal_.o s_stop.o s_paus.o system_.o cabs.o ctype.o\ + derf_.o derfc_.o erf_.o erfc_.o sig_die.o uninit.o +POW = pow_ci.o pow_dd.o pow_di.o pow_hh.o pow_ii.o pow_ri.o pow_zi.o pow_zz.o +CX = c_abs.o c_cos.o c_div.o c_exp.o c_log.o c_sin.o c_sqrt.o +DCX = z_abs.o z_cos.o z_div.o z_exp.o z_log.o z_sin.o z_sqrt.o +REAL = r_abs.o r_acos.o r_asin.o r_atan.o r_atn2.o r_cnjg.o r_cos.o\ + r_cosh.o r_dim.o r_exp.o r_imag.o r_int.o\ + r_lg10.o r_log.o r_mod.o r_nint.o r_sign.o\ + r_sin.o r_sinh.o r_sqrt.o r_tan.o r_tanh.o +DBL = d_abs.o d_acos.o d_asin.o d_atan.o d_atn2.o\ + d_cnjg.o d_cos.o d_cosh.o d_dim.o d_exp.o\ + d_imag.o d_int.o d_lg10.o d_log.o d_mod.o\ + d_nint.o d_prod.o d_sign.o d_sin.o d_sinh.o\ + d_sqrt.o d_tan.o d_tanh.o +INT = i_abs.o i_dim.o i_dnnt.o i_indx.o i_len.o i_mod.o i_nint.o i_sign.o\ + lbitbits.o lbitshft.o +HALF = h_abs.o h_dim.o h_dnnt.o h_indx.o h_len.o h_mod.o h_nint.o h_sign.o +CMP = l_ge.o l_gt.o l_le.o l_lt.o hl_ge.o hl_gt.o hl_le.o hl_lt.o +EFL = ef1asc_.o ef1cmc_.o +CHAR = f77_aloc.o s_cat.o s_cmp.o s_copy.o +I77 = backspac.o close.o dfe.o dolio.o due.o endfile.o err.o\ + fmt.o fmtlib.o ftell_.o iio.o ilnw.o inquire.o lread.o lwrite.o\ + open.o rdfmt.o rewind.o rsfe.o rsli.o rsne.o sfe.o sue.o\ + typesize.o uio.o util.o wref.o wrtfmt.o wsfe.o wsle.o wsne.o xwsne.o +QINT = pow_qq.o qbitbits.o qbitshft.o ftell64_.o +TIME = dtime_.o etime_.o + +# If you get an error compiling dtime_.c or etime_.c, try adding +# -DUSE_CLOCK to the CFLAGS assignment above; if that does not work, +# omit $(TIME) from OFILES = assignment below. + +# To get signed zeros in write statements on IEEE-arithmetic systems, +# add -DSIGNED_ZEROS to the CFLAGS assignment below and add signbit.o +# to the end of the OFILES = assignment below. + +# For INTEGER*8 support (which requires system-dependent adjustments to +# f2c.h), add $(QINT) to the OFILES = assignment below... + +OFILES = $(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DBL) $(INT) \ + $(HALF) $(CMP) $(EFL) $(CHAR) $(I77) $(TIME) + +all: f2c.h signal1.h sysdep1.h libf2c.a + +libf2c.a: $(OFILES) + ar r libf2c.a $? + -ranlib libf2c.a + +## Shared-library variant: the following rule works on Linux +## systems. Details are system-dependent. Under Linux, -fPIC +## must appear in the CFLAGS assignment when making libf2c.so. +## Under Solaris, use -Kpic in CFLAGS and use "ld -G" instead +## of "$(CC) -shared". +## For MacOSX 10.4 and 10.5 (and perhaps other versions >= 10.3), use +## "MACOSX_DEPLOYMENT_TARGET=10.3 libtool -dynamic -undefined dynamic_lookup -single_module" +## instead of "$(CC) -shared", and when running programs linked against libf2c.so, +## arrange for $DYLD_LIBRARY_PATH to include the directory containing libf2c.so. + +libf2c.so: $(OFILES) + $(CC) -shared -o libf2c.so $(OFILES) + +### If your system lacks ranlib, you don't need it; see README. + +f77vers.o: f77vers.c + $(CC) -c f77vers.c + +i77vers.o: i77vers.c + $(CC) -c i77vers.c + +# To get an "f2c.h" for use with "f2c -C++", first "make hadd" +hadd: f2c.h0 f2ch.add + cat f2c.h0 f2ch.add >f2c.h + +# For use with "f2c" and "f2c -A": +f2c.h: f2c.h0 + cp f2c.h0 f2c.h + +# You may need to adjust signal1.h and sysdep1.h suitably for your system... +signal1.h: signal1.h0 + cp signal1.h0 signal1.h + +sysdep1.h: sysdep1.h0 + cp sysdep1.h0 sysdep1.h + +# If your system lacks onexit() and you are not using an +# ANSI C compiler, then you should uncomment the following +# two lines (for compiling main.o): +#main.o: main.c +# $(CC) -c -DNO_ONEXIT -DSkip_f2c_Undefs main.c +# On at least some Sun systems, it is more appropriate to +# uncomment the following two lines: +#main.o: main.c +# $(CC) -c -Donexit=on_exit -DSkip_f2c_Undefs main.c + +install: libf2c.a + cp libf2c.a $(LIBDIR) + -ranlib $(LIBDIR)/libf2c.a + +clean: + rm -f libf2c.a *.o arith.h signal1.h sysdep1.h + +backspac.o: fio.h +close.o: fio.h +dfe.o: fio.h +dfe.o: fmt.h +due.o: fio.h +endfile.o: fio.h rawio.h +err.o: fio.h rawio.h +fmt.o: fio.h +fmt.o: fmt.h +iio.o: fio.h +iio.o: fmt.h +ilnw.o: fio.h +ilnw.o: lio.h +inquire.o: fio.h +lread.o: fio.h +lread.o: fmt.h +lread.o: lio.h +lread.o: fp.h +lwrite.o: fio.h +lwrite.o: fmt.h +lwrite.o: lio.h +open.o: fio.h rawio.h +rdfmt.o: fio.h +rdfmt.o: fmt.h +rdfmt.o: fp.h +rewind.o: fio.h +rsfe.o: fio.h +rsfe.o: fmt.h +rsli.o: fio.h +rsli.o: lio.h +rsne.o: fio.h +rsne.o: lio.h +sfe.o: fio.h +signbit.o: arith.h +sue.o: fio.h +uio.o: fio.h +uninit.o: arith.h +util.o: fio.h +wref.o: fio.h +wref.o: fmt.h +wref.o: fp.h +wrtfmt.o: fio.h +wrtfmt.o: fmt.h +wsfe.o: fio.h +wsfe.o: fmt.h +wsle.o: fio.h +wsle.o: fmt.h +wsle.o: lio.h +wsne.o: fio.h +wsne.o: lio.h +xwsne.o: fio.h +xwsne.o: lio.h +xwsne.o: fmt.h + +arith.h: arithchk.c + $(CC) $(CFLAGS) -DNO_FPINIT arithchk.c -lm ||\ + $(CC) -DNO_LONG_LONG $(CFLAGS) -DNO_FPINIT arithchk.c -lm + ./a.out >arith.h + rm -f a.out arithchk.o + +check: + xsum Notice README abort_.c arithchk.c backspac.c c_abs.c c_cos.c \ + c_div.c c_exp.c c_log.c c_sin.c c_sqrt.c cabs.c close.c comptry.bat \ + ctype.c ctype.h \ + d_abs.c d_acos.c d_asin.c d_atan.c d_atn2.c d_cnjg.c d_cos.c d_cosh.c \ + d_dim.c d_exp.c d_imag.c d_int.c d_lg10.c d_log.c d_mod.c \ + d_nint.c d_prod.c d_sign.c d_sin.c d_sinh.c d_sqrt.c d_tan.c \ + d_tanh.c derf_.c derfc_.c dfe.c dolio.c dtime_.c due.c ef1asc_.c \ + ef1cmc_.c endfile.c erf_.c erfc_.c err.c etime_.c exit_.c f2c.h0 \ + f2ch.add f77_aloc.c f77vers.c fio.h fmt.c fmt.h fmtlib.c \ + fp.h ftell_.c ftell64_.c \ + getarg_.c getenv_.c h_abs.c h_dim.c h_dnnt.c h_indx.c h_len.c \ + h_mod.c h_nint.c h_sign.c hl_ge.c hl_gt.c hl_le.c hl_lt.c \ + i77vers.c i_abs.c i_dim.c i_dnnt.c i_indx.c i_len.c i_mod.c \ + i_nint.c i_sign.c iargc_.c iio.c ilnw.c inquire.c l_ge.c l_gt.c \ + l_le.c l_lt.c lbitbits.c lbitshft.c libf2c.lbc libf2c.sy lio.h \ + lread.c lwrite.c main.c makefile.sy makefile.u makefile.vc \ + makefile.wat math.hvc mkfile.plan9 open.c pow_ci.c pow_dd.c \ + pow_di.c pow_hh.c pow_ii.c pow_qq.c pow_ri.c pow_zi.c pow_zz.c \ + qbitbits.c qbitshft.c r_abs.c r_acos.c r_asin.c r_atan.c r_atn2.c \ + r_cnjg.c r_cos.c r_cosh.c r_dim.c r_exp.c r_imag.c r_int.c r_lg10.c \ + r_log.c r_mod.c r_nint.c r_sign.c r_sin.c r_sinh.c r_sqrt.c \ + r_tan.c r_tanh.c rawio.h rdfmt.c rewind.c rsfe.c rsli.c rsne.c \ + s_cat.c s_cmp.c s_copy.c s_paus.c s_rnge.c s_stop.c scomptry.bat sfe.c \ + sig_die.c signal1.h0 signal_.c signbit.c sue.c sysdep1.h0 system_.c \ + typesize.c \ + uio.c uninit.c util.c wref.c wrtfmt.c wsfe.c wsle.c wsne.c xwsne.c \ + z_abs.c z_cos.c z_div.c z_exp.c z_log.c z_sin.c z_sqrt.c >xsum1.out + cmp xsum0.out xsum1.out && mv xsum1.out xsum.out || diff xsum[01].out