From 95d57ceae288e1694ac71cbda403210db93389dd Mon Sep 17 00:00:00 2001 From: James Uber Date: Tue, 18 Aug 2009 08:17:28 +0000 Subject: [PATCH] After much thought and deliberation... a change in EPANET repo policy regarding Makefiles and their output targets. Used to create library and executable file names that included the compiler (e.g., *_gcc_*) and the SVN rev (*_309_*). This was to allow development along the trunk while keeping clean track of the SVN versions that objects were made from. Maybe a good idea in part, but no longer. It collapsed under its own complexity. The need to keep track of all the specific file names became more burdensome that the need to keep track of which source actually built an object. As of now, Makefiles produce unadorned file names: Linux: lib.so Cygwin: cyg.dll cyg.exe libcyg.dll.a MSVC: .dll .exe .lib MinGW: Same as MSVC Darwin: Don't know about this, but I think they already were produced with just dy extensions Under this scheme MinGW looks just like MSVC, but I guess that's the whole point... git-svn-id: https://epanet.svn.sourceforge.net/svnroot/epanet/BASE/trunk@314 c320cabd-cc23-0410-96d8-e60fbf53ed7f --- build/Cyg/Makefile | 29 ++--- build/Cyg/Makefile_Rev | 130 +++++++++++++++++++ build/Linux/Makefile | 23 ++-- build/Linux/Makefile_Rev | 111 +++++++++++++++++ build/MSVC/epanet-dll/epanet-dll.vcproj | 3 +- build/MSVC/epanet-exe/epanet-exe.vcproj | 1 + build/MingW/Makefile | 54 ++++---- build/MingW/Makefile_Rev | 159 ++++++++++++++++++++++++ 8 files changed, 454 insertions(+), 56 deletions(-) create mode 100755 build/Cyg/Makefile_Rev create mode 100755 build/Linux/Makefile_Rev create mode 100755 build/MingW/Makefile_Rev 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)