diff --git a/build/Cyg/Makefile b/build/Cyg/Makefile index c09750c..b900e36 100755 --- a/build/Cyg/Makefile +++ b/build/Cyg/Makefile @@ -1,35 +1,33 @@ # Cygwin Makefile for EPANET # This will build EPANET as a cygwin DLL and import -# library (cygepanet_gcc_.dll/libcygepanet_gcc_.dll.a) under Cygwin/gcc, -# and a standalone executable (cygepanet_gcc_.exe). -# is the atomic revision number of the EPANET SVN repo, -# so the results of each build can be unambiguously tracked to a repo Rev. +# library (cygepanet.dll/libcygepanet.dll.a) under Cygwin/gcc, +# and a standalone executable (cygepanet.exe). # The current release of the Cygwin environment can be # obtained from http://www.cygwin.com # The following targets are defined (for execution in # the build directory under the Cygwin environment): # make -# -Builds cygepanet_gcc_.dll, cygepanet_gcc_.def, libcygepanet_gcc_.dll.a, -# cygepanet_gcc_.exe +# -Builds cygepanet2.dll, cygepanet2.def, libcygepanet2.dll.a, +# cygepanet2.exe # make install -# -Creates shell wrapper runcygepanet_.sh that -# executes cygepanet_gcc_.exe. -# The runcygepanet_.sh wrapper simply exports +# -Creates shell wrapper runcygepanet2.sh that +# executes cygepanet2.exe. +# The runcygepanet2.sh wrapper simply exports # environment variables so that the DLL is found at runtime, # allowing you to specify your own locations for installing # the DLL. -# -Installs cygepanet_gcc_.dll, cygepanet_gcc_.exe, and runcygepanet_.sh +# -Installs cygepanet2.dll, cygepanet2.exe, and runcygepanet2.sh # in /bin, where defaults to ~ (and can be set # below to something different - see "Install directories") -# -Installs libcygepanet_gcc_.dll.a (import library), and cygepanet_gcc_.def, +# -Installs libcygepanet2.dll.a (import library), and cygepanet2.def, # in /lib # -Installs epanet2.h in /include. This is the required # header file for the EPANET programmer's toolkit, and thus # /include should be on your CPP include search path # for subsequent use of the toolkit and linking with the import -# library libcygepanet_gcc_.dll.a. +# library libcygepanet2.dll.a. # make clean # -Removes object and library files, returning the build directory # to its pristine state. @@ -41,17 +39,14 @@ SHELL = /bin/sh # or the compiler flags, but these defaults should be fine. # Target filenames -# svnname.sh constructs a name: -# where is the atomic revision number of the svn repo. -epanetsvnpath = ../../.. -epanetrootname := $(shell ../svnname.sh $(epanetsvnpath) "" cygepanet_gcc_ "") +epanetrootname := cygepanet2 dllname := $(epanetrootname).dll defname := $(epanetrootname).def implibname = lib$(dllname).a exename := $(epanetrootname) # Shell wrapper runcmdtemplate = runepanet.sh.template -runcmdname = $(shell ../svnname.sh $(epanetsvnpath) "" runcygepanet_ .sh) +runcmdname = runcygepanet2.sh # Location of EPANET toolkit includes epanetincludedir = ../../include # Search path for sources diff --git a/build/Cyg/Makefile_Rev b/build/Cyg/Makefile_Rev new file mode 100755 index 0000000..c09750c --- /dev/null +++ b/build/Cyg/Makefile_Rev @@ -0,0 +1,130 @@ +# Cygwin Makefile for EPANET + +# This will build EPANET as a cygwin DLL and import +# library (cygepanet_gcc_.dll/libcygepanet_gcc_.dll.a) under Cygwin/gcc, +# and a standalone executable (cygepanet_gcc_.exe). +# is the atomic revision number of the EPANET SVN repo, +# so the results of each build can be unambiguously tracked to a repo Rev. +# The current release of the Cygwin environment can be +# obtained from http://www.cygwin.com + +# The following targets are defined (for execution in +# the build directory under the Cygwin environment): +# make +# -Builds cygepanet_gcc_.dll, cygepanet_gcc_.def, libcygepanet_gcc_.dll.a, +# cygepanet_gcc_.exe +# make install +# -Creates shell wrapper runcygepanet_.sh that +# executes cygepanet_gcc_.exe. +# The runcygepanet_.sh wrapper simply exports +# environment variables so that the DLL is found at runtime, +# allowing you to specify your own locations for installing +# the DLL. +# -Installs cygepanet_gcc_.dll, cygepanet_gcc_.exe, and runcygepanet_.sh +# in /bin, where defaults to ~ (and can be set +# below to something different - see "Install directories") +# -Installs libcygepanet_gcc_.dll.a (import library), and cygepanet_gcc_.def, +# in /lib +# -Installs epanet2.h in /include. This is the required +# header file for the EPANET programmer's toolkit, and thus +# /include should be on your CPP include search path +# for subsequent use of the toolkit and linking with the import +# library libcygepanet_gcc_.dll.a. +# make clean +# -Removes object and library files, returning the build directory +# to its pristine state. + +SHELL = /bin/sh + +# C H A N G E H E R E A S N E E D E D +# You may wish to change the install path 'prefix', +# or the compiler flags, but these defaults should be fine. + +# Target filenames +# svnname.sh constructs a name: +# where is the atomic revision number of the svn repo. +epanetsvnpath = ../../.. +epanetrootname := $(shell ../svnname.sh $(epanetsvnpath) "" cygepanet_gcc_ "") +dllname := $(epanetrootname).dll +defname := $(epanetrootname).def +implibname = lib$(dllname).a +exename := $(epanetrootname) +# Shell wrapper +runcmdtemplate = runepanet.sh.template +runcmdname = $(shell ../svnname.sh $(epanetsvnpath) "" runcygepanet_ .sh) +# Location of EPANET toolkit includes +epanetincludedir = ../../include +# Search path for sources +epanetsrcdir = ../../src +VPATH = $(epanetsrcdir):$(epanetincludedir) + +# Install directories +prefix = ~ +exec_prefix = $(prefix) +srcdir = . +libdir = $(exec_prefix)/lib +bindir = $(exec_prefix)/bin +includedir = $(prefix)/include +datarootdir = $(prefix)/share +docdir = $(datarootdir)/doc/epanet + +# Compiler and flags +CC = /bin/gcc +dlltool = /bin/dlltool +CFLAGS = -g -O3 +CPPFLAGS = -I $(srcdir) -I $(epanetincludedir) +LDFLAGS = -L . -W1,-rpath,$(libdir) -lm + +# Installer +INSTALL = install +INSTALL_PROGRAM = $(INSTALL) +INSTALL_DATA = $(INSTALL) -m 644 + +# EPANET object files +epanet_objs=hash.o hydraul.o inpfile.o input1.o input2.o \ + input3.o mempool.o output.o quality.o report.o \ + rules.o smatrix.o +# Epanet header files +epanet_heads=enumstxt.h funcs.h hash.h mempool.h text.h toolkit.h types.h vars.h +epanet_main_heads=epanet2.h +# Epanet main program +epanet_main=epanet + +.PHONY: all +all: $(dllname) $(exename) + +$(dllname): $(epanet_objs) +# $(dlltool) -z $(defname) --dllname $(dllname) --output-lib $(implibname) $^ +# $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $(defname) $^ + $(CC) $(CFLAGS) $(CPPFLAGS) -D SOL -c $(epanetsrcdir)/$(epanet_main).c + $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $(epanet_main).o $^ -Wl,--output-def,$(defname) + $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $(epanet_main).o $^ -Wl,--kill-at + $(dlltool) -d $(defname) --dllname $@ --output-lib $(implibname) --kill-at + +$(exename): $(epanet_objs) + $(CC) $(CFLAGS) $(CPPFLAGS) -D CLE -c $(epanetsrcdir)/$(epanet_main).c + $(CC) $(CFLAGS) -o $@ $(epanet_main).o $^ $(LDFLAGS) + +$(epanet_objs): $(epanet_heads) + +.PHONY: install +install: + cat $(runcmdtemplate) | sed 's|libdir|$(bindir)|' \ + | sed 's|exename|$(bindir)/$(exename)|' \ + > $(runcmdname) + $(INSTALL_PROGRAM) -D $(exename) $(bindir)/$(exename) + $(INSTALL_PROGRAM) -D $(dllname) $(bindir)/$(dllname) + $(INSTALL_PROGRAM) -D $(defname) $(libdir)/$(defname) + $(INSTALL_PROGRAM) -D $(implibname) $(libdir)/$(implibname) + $(INSTALL_DATA) -D $(epanetincludedir)/epanet2.h $(includedir)/epanet2.h + $(INSTALL_PROGRAM) -D $(runcmdname) $(bindir)/$(runcmdname) + +.PHONY: uninstall +uninstall: + +.PHONY: check +check: + +.PHONY: clean +clean: + -/bin/rm *.o $(dllname) $(defname) $(implibname) $(exename).exe $(runcmdname) diff --git a/build/Linux/Makefile b/build/Linux/Makefile index f6e33bc..2a0a396 100755 --- a/build/Linux/Makefile +++ b/build/Linux/Makefile @@ -1,26 +1,26 @@ # Linux Makefile for EPANET # This will build EPANET as a shared object library -# (libepanet_gcc_.so) under Linux/Unix, and a standalone -# executable (epanet_gcc_). +# (libepanet2.so) under Linux/Unix, and a standalone +# executable (epanet2). # The following targets are defined: # make -# -Builds libepanet_gcc_.so, epanet_gcc_ +# -Builds libepanet2.so, epanet2 # make install -# -Creates shell wrapper runepanet_.sh that executes epanet_gcc_.exe. -# The runepanet_.sh wrapper simply exports +# -Creates shell wrapper runepanet2.sh that executes epanet2. +# The runepanet2.sh wrapper simply exports # environment variables that help locate the runtime library, # allowing you to specify your own library locations. -# -Installs epanet_gcc_ and runepanet_.sh +# -Installs epanet2 and runepanet2.sh # in /bin, where defaults to ~ (and can be set # below to something different - see "Install directories") -# -Installs libepanet_gcc_.so in /lib +# -Installs libepanet2.so in /lib # -Installs epanet2.h in /include. This is the required # header file for the EPANET programmer's toolkit, and thus # /include should be on your CPP include search path # for subsequent use of the toolkit and linking with the -# library libepanet_gcc_.so +# library libepanet2.so # make clean # -Removes object and library files, returning the build directory # to its pristine state. @@ -31,15 +31,12 @@ SHELL = /bin/sh # Target filenames -# svnname.sh constructs a name: -# where is the atomic revision number of the svn repo. -epanetsvnpath = ../../.. -epanetrootname := $(shell ../svnname.sh $(epanetsvnpath) "" epanet_gcc_ "") +epanetrootname := epanet2 libname := lib$(epanetrootname).so exename := $(epanetrootname) # Shell wrapper runcmdtemplate = runepanet.sh.template -runcmdname = $(shell ../svnname.sh $(epanetsvnpath) "" runepanet_ .sh) +runcmdname = runepanet2.sh # Location of EPANET toolkit includes epanetincludedir = ../../include # Search path for sources diff --git a/build/Linux/Makefile_Rev b/build/Linux/Makefile_Rev new file mode 100755 index 0000000..f6e33bc --- /dev/null +++ b/build/Linux/Makefile_Rev @@ -0,0 +1,111 @@ +# Linux Makefile for EPANET + +# This will build EPANET as a shared object library +# (libepanet_gcc_.so) under Linux/Unix, and a standalone +# executable (epanet_gcc_). + +# The following targets are defined: +# make +# -Builds libepanet_gcc_.so, epanet_gcc_ +# make install +# -Creates shell wrapper runepanet_.sh that executes epanet_gcc_.exe. +# The runepanet_.sh wrapper simply exports +# environment variables that help locate the runtime library, +# allowing you to specify your own library locations. +# -Installs epanet_gcc_ and runepanet_.sh +# in /bin, where defaults to ~ (and can be set +# below to something different - see "Install directories") +# -Installs libepanet_gcc_.so in /lib +# -Installs epanet2.h in /include. This is the required +# header file for the EPANET programmer's toolkit, and thus +# /include should be on your CPP include search path +# for subsequent use of the toolkit and linking with the +# library libepanet_gcc_.so +# make clean +# -Removes object and library files, returning the build directory +# to its pristine state. + +# You may wish to change the install path 'prefix', +# or the compiler flags, but these defaults should be fine. + +SHELL = /bin/sh + +# Target filenames +# svnname.sh constructs a name: +# where is the atomic revision number of the svn repo. +epanetsvnpath = ../../.. +epanetrootname := $(shell ../svnname.sh $(epanetsvnpath) "" epanet_gcc_ "") +libname := lib$(epanetrootname).so +exename := $(epanetrootname) +# Shell wrapper +runcmdtemplate = runepanet.sh.template +runcmdname = $(shell ../svnname.sh $(epanetsvnpath) "" runepanet_ .sh) +# Location of EPANET toolkit includes +epanetincludedir = ../../include +# Search path for sources +epanetsrcdir = ../../src +VPATH = $(epanetsrcdir):$(epanetincludedir) + +# Install directories +prefix = ~ +exec_prefix = $(prefix) +libdir = $(exec_prefix)/lib +bindir = $(exec_prefix)/bin +includedir = $(prefix)/include +datarootdir = $(prefix)/share +docdir = $(datarootdir)/doc/epanet + +# Compiler and flags +CC = gcc +CFLAGS = -g -O3 -fPIC +CPPFLAGS = -I $(epanetincludedir) +LDFLAGS = -L . -W1,-rpath,$(libdir) -lm + +# Installer +INSTALL = install +INSTALL_PROGRAM = $(INSTALL) +INSTALL_DATA = $(INSTALL) -m 644 + +# Files for the shared object library +epanet_objs=hash.o hydraul.o inpfile.o input1.o input2.o \ + input3.o mempool.o output.o quality.o report.o \ + rules.o smatrix.o +# Epanet header files +epanet_heads=enumstxt.h funcs.h hash.h mempool.h text.h toolkit.h types.h vars.h +# Epanet main program +epanet_main=epanet +# Epanet main program header files +epanet_main_heads=epanet2.h + +.PHONY: all +all: $(libname) $(exename) + +$(libname): $(epanet_objs) + $(CC) $(CFLAGS) $(CPPFLAGS) -D SOL -c $(epanetsrcdir)/$(epanet_main).c + $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $(epanet_main).o $^ + +$(exename): $(libname) $(epanet_main_heads) + $(CC) $(CFLAGS) $(CPPFLAGS) -D CLE -c $(epanetsrcdir)/$(epanet_main).c + $(CC) $(CFLAGS) -o $@ $(epanet_main).o -l$(epanetrootname) $(LDFLAGS) + +$(epanet_objs): $(epanet_heads) + +.PHONY: install +install: + cat $(runcmdtemplate) | sed 's|libdir|$(libdir)|' \ + | sed 's|exename|$(bindir)/$(exename)|' \ + > $(runcmdname) + $(INSTALL_PROGRAM) -D $(exename) $(bindir)/$(exename) + $(INSTALL_PROGRAM) -D $(libname) $(libdir)/$(libname) + $(INSTALL_DATA) -D $(epanetincludedir)/epanet2.h $(includedir)/epanet2.h + $(INSTALL_PROGRAM) -D $(runcmdname) $(bindir)/$(runcmdname) + +.PHONY: uninstall +uninstall: + +.PHONY: check +check: + +.PHONY: clean +clean: + -/bin/rm *.o $(libname) $(exename) $(runcmdname) diff --git a/build/MSVC/epanet-dll/epanet-dll.vcproj b/build/MSVC/epanet-dll/epanet-dll.vcproj index f0c3180..8c76378 100755 --- a/build/MSVC/epanet-dll/epanet-dll.vcproj +++ b/build/MSVC/epanet-dll/epanet-dll.vcproj @@ -88,6 +88,7 @@ /> diff --git a/build/MSVC/epanet-exe/epanet-exe.vcproj b/build/MSVC/epanet-exe/epanet-exe.vcproj index b14bf8c..7a6d512 100755 --- a/build/MSVC/epanet-exe/epanet-exe.vcproj +++ b/build/MSVC/epanet-exe/epanet-exe.vcproj @@ -90,6 +90,7 @@ /> .dll/libepanet_gcc_.dll.a) under Cygwin/MinGW, -# and a standalone executable (epanet_gcc_.exe). -# is the atomic revision number of the EPANET SVN repo, -# so the results of each build can be unambiguously tracked to a repo Rev. +# library (epanet2.dll/libepanet2.dll.a) using MinGW/gcc, +# and a standalone executable (epanet2.exe). # This makefile also creates a windows batch file -# (see MScmdname below) that will produce an import +# (see MScmdname below) that can be run to produce an import # library for linking the DLL using MSVC. -# This makefile assumes a Cygwin environment with minimal +# This makefile assumes a minimum # MinGW installation, and uses the MinGW gcc compiler from # the MinGW install directory. # The current release of MinGW can be obtained from -# http://sourceforge.net/project/showfiles.php?group_id=2435 -# The current release of the Cygwin environment can be -# obtained from http://www.cygwin.com +# http://www.mingw.org/wiki/Getting_Started -- the easiest +# approach is to download the latest MingW installer and +# accept all of the defaults. # The following targets are defined (for execution in -# the build directory under the Cygwin environment): +# the build directory): # make -# -Builds epanet_gcc_.dll, epanet_gcc_.def, libepanet_gcc_.dll.a, -# epanet_gcc_.exe +# -Builds epanet2.dll, epanet2.def, libepanet2.dll.a, +# epanet2.exe # make install -# -Creates shell wrappers runepanet_.sh and CreateMSLib_.bat that -# execute epanet_gcc_.exe, and MSVC 'lib' (to create an MSVC -# import library). The runepanet_.sh wrapper simply exports +# -Creates scripts runepanet2.sh and CreateEpanet2Lib.bat that +# execute epanet2.exe, and MSVC 'lib' (to create an MSVC +# import library). The runepanet2.sh wrapper simply exports # environment variables so that the DLL is found at runtime, # allowing you to specify your own locations for installing # the DLL. -# -Installs epanet_gcc_.dll, epanet_gcc_.exe, and runepanet_.sh +# -Installs epanet2.dll, epanet2.exe, and runepanet2.sh # in /bin, where defaults to ~ (and can be set # below to something different - see "Install directories") -# -Installs libepanet_gcc_.dll.a (import library), epanet_gcc_.def, -# and CreateMSLib-.bat in /lib +# -Installs libepanet2.dll.a (import library), epanet2.def, +# and CreateEpanet2Lib.bat in /lib # -Installs epanet2.h in /include. This is the required # header file for the EPANET programmer's toolkit, and thus # /include should be on your CPP include search path # for subsequent use of the toolkit and linking with the import -# library libepanet_gcc_.dll.a. +# library libepanet2.dll.a or epanet2.lib. # make clean # -Removes object and library files, returning the build directory # to its pristine state. @@ -53,23 +58,22 @@ SHELL = /bin/sh # MinGW top level install directory, accessible from build environment MinGWdir = /cygdrive/c/MinGW # Microsoft lib tool directory (for creating an MS import library) -MSVClibexe = c:\\Program Files\\Microsoft Visual Studio .NET 2003\\Vc7\\bin\\lib +MSVClibexe = c:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\bin\\lib # Target filenames # svnname.sh constructs a name: # where is the atomic revision number of the svn repo. -epanetsvnpath = ../../.. -epanetrootname := $(shell ../svnname.sh $(epanetsvnpath) "" epanet_gcc_ "") +epanetrootname := epanet2 dllname := $(epanetrootname).dll defname := $(epanetrootname).def implibname = lib$(dllname).a exename := $(epanetrootname) # Shell wrapper runcmdtemplate = runepanet.sh.template -runcmdname = $(shell ../svnname.sh $(epanetsvnpath) "" runepanet_ .sh) +runcmdname = runepanet2.sh # MSVC import lib batch file MScmdtemplate = CreateMSLib.bat.template -MScmdname = $(shell ../svnname.sh $(epanetsvnpath) "" CreateMSLib_ .bat) +MScmdname = CreateEpanet2Lib.bat # Location of EPANET toolkit includes epanetincludedir = ../../include # Search path for sources diff --git a/build/MingW/Makefile_Rev b/build/MingW/Makefile_Rev new file mode 100755 index 0000000..c88de77 --- /dev/null +++ b/build/MingW/Makefile_Rev @@ -0,0 +1,159 @@ +# Cygwin/MinGW Makefile for EPANET + +# This will build EPANET as a native windows DLL and import +# library (epanet_gcc_.dll/libepanet_gcc_.dll.a) under Cygwin/MinGW, +# and a standalone executable (epanet_gcc_.exe). +# is the atomic revision number of the EPANET SVN repo, +# so the results of each build can be unambiguously tracked to a repo Rev. +# This makefile also creates a windows batch file +# (see MScmdname below) that will produce an import +# library for linking the DLL using MSVC. +# This makefile assumes a Cygwin environment with minimal +# MinGW installation, and uses the MinGW gcc compiler from +# the MinGW install directory. +# The current release of MinGW can be obtained from +# http://www.mingw.org/wiki/Getting_Started -- the easiest +# approach is to download the latest MingW installer and +# accept all of the defaults. +# The current release of the Cygwin environment can be +# obtained from http://www.cygwin.com + +# The following targets are defined (for execution in +# the build directory under the Cygwin environment): +# make +# -Builds epanet_gcc_.dll, epanet_gcc_.def, libepanet_gcc_.dll.a, +# epanet_gcc_.exe +# make install +# -Creates shell wrappers runepanet_.sh and CreateMSLib_.bat that +# execute epanet_gcc_.exe, and MSVC 'lib' (to create an MSVC +# import library). The runepanet_.sh wrapper simply exports +# environment variables so that the DLL is found at runtime, +# allowing you to specify your own locations for installing +# the DLL. +# -Installs epanet_gcc_.dll, epanet_gcc_.exe, and runepanet_.sh +# in /bin, where defaults to ~ (and can be set +# below to something different - see "Install directories") +# -Installs libepanet_gcc_.dll.a (import library), epanet_gcc_.def, +# and CreateMSLib-.bat in /lib +# -Installs epanet2.h in /include. This is the required +# header file for the EPANET programmer's toolkit, and thus +# /include should be on your CPP include search path +# for subsequent use of the toolkit and linking with the import +# library libepanet_gcc_.dll.a. +# make clean +# -Removes object and library files, returning the build directory +# to its pristine state. + +SHELL = /bin/sh + +# C H A N G E H E R E A S N E E D E D +# Change (as needed) the MinGW install directory below. +# Change (as needed) the location off the MS LIB tool. +# You may also wish to change the install path 'prefix', +# or the compiler flags, but these defaults should be fine. + +# MinGW top level install directory, accessible from build environment +MinGWdir = /cygdrive/c/MinGW +# Microsoft lib tool directory (for creating an MS import library) +MSVClibexe = c:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\bin\\lib + +# Target filenames +# svnname.sh constructs a name: +# where is the atomic revision number of the svn repo. +epanetsvnpath = ../../.. +epanetrootname := $(shell ../svnname.sh $(epanetsvnpath) "" epanet_gcc_ "") +dllname := $(epanetrootname).dll +defname := $(epanetrootname).def +implibname = lib$(dllname).a +exename := $(epanetrootname) +# Shell wrapper +runcmdtemplate = runepanet.sh.template +runcmdname = $(shell ../svnname.sh $(epanetsvnpath) "" runepanet_ .sh) +# MSVC import lib batch file +MScmdtemplate = CreateMSLib.bat.template +MScmdname = $(shell ../svnname.sh $(epanetsvnpath) "" CreateEpanetLib_ .bat) +# Location of EPANET toolkit includes +epanetincludedir = ../../include +# Search path for sources +epanetsrcdir = ../../src +VPATH = $(epanetsrcdir):$(epanetincludedir) + +# Install directories +winprefix = $(shell cygpath -w $$HOME) +prefix = ~ +exec_prefix = $(prefix) +srcdir = . +libdir = $(exec_prefix)/lib +winlibdir = "$(winprefix)\lib" +bindir = $(exec_prefix)/bin +includedir = $(prefix)/include +winincludedir = "$(winprefix)\include" +datarootdir = $(prefix)/share +docdir = $(datarootdir)/doc/epanet + +# Compiler and flags +# MinGW gcc +CC = $(MinGWdir)/bin/gcc +dlltool = $(MinGWdir)/bin/dlltool +CFLAGS = -g -O3 +CPPFLAGS = -I $(srcdir) -I $(epanetincludedir) +LDFLAGS = -L . -W1,-rpath,$(libdir) -lm + +# Installer +INSTALL = install +INSTALL_PROGRAM = $(INSTALL) +INSTALL_DATA = $(INSTALL) -m 644 + +# EPANET object files +epanet_objs=hash.o hydraul.o inpfile.o input1.o input2.o \ + input3.o mempool.o output.o quality.o report.o \ + rules.o smatrix.o +# Epanet header files +epanet_heads=enumstxt.h funcs.h hash.h mempool.h text.h toolkit.h types.h vars.h +epanet_main_heads=epanet2.h +# Epanet main program +epanet_main=epanet + +.PHONY: all +all: $(dllname) $(exename) + +$(dllname): $(epanet_objs) +# $(dlltool) -z $(defname) --dllname $(dllname) --output-lib $(implibname) $^ +# $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $(defname) $^ + $(CC) $(CFLAGS) $(CPPFLAGS) -D DLL -c $(epanetsrcdir)/epanet.c + $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ epanet.o $^ -Wl,--output-def,$(defname) + $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ epanet.o $^ -Wl,--kill-at + $(dlltool) -d $(defname) --dllname $@ --output-lib $(implibname) --kill-at + +$(exename): $(epanet_objs) + $(CC) $(CFLAGS) $(CPPFLAGS) -D CLE -c $(epanetsrcdir)/$(epanet_main).c + $(CC) $(CFLAGS) -o $@ $(epanet_main).o $^ $(LDFLAGS) + +$(epanet_objs): $(epanet_heads) + +.PHONY: install +install: + cat $(runcmdtemplate) | sed 's|libdir|$(bindir)|' \ + | sed 's|exename|$(bindir)/$(exename)|' \ + > $(runcmdname) + cat $(MScmdtemplate) | sed 's|MSVClibexe|$(MSVClibexe)|' \ + | sed 's|defname|$(defname)|' \ + | sed 's|libdir|$(libdir)|' \ + > $(MScmdname) + $(INSTALL_PROGRAM) -D $(exename) $(bindir)/$(exename) + $(INSTALL_PROGRAM) -D $(dllname) $(bindir)/$(dllname) + $(INSTALL_PROGRAM) -D $(defname) $(libdir)/$(defname) + $(INSTALL_PROGRAM) -D $(implibname) $(libdir)/$(implibname) + $(INSTALL_DATA) -D $(epanetincludedir)/epanet2.h $(includedir)/epanet2.h + $(INSTALL_PROGRAM) -D $(runcmdname) $(bindir)/$(runcmdname) + $(INSTALL_PROGRAM) -D $(MScmdname) $(libdir)/$(MScmdname) + +.PHONY: uninstall +uninstall: + +.PHONY: check +check: + +.PHONY: clean +clean: + -/bin/rm *.o $(dllname) $(defname) $(implibname) $(exename).exe $(runcmdname) $(MScmdname)