×
Yeni bir madde oluştur
Sayfa başlığınızı buraya yazın:
We currently have 15 articles on UHeM Wiki. Type your article name above or create one of the articles listed here!



    UHeM Wiki
    15Maddeler

    Kendi Ev Dizinimize Program Kurmak


    Sariyer kümesini kullanırken kendi ev dizinimize program kurmak istememiz için bir çok sebebimiz olabilir:

    • Kullanmak istediğimiz program Sariyer kümesinde kurulu olmayabilir.
    • Kurulu olsa bile bizim istediğimiz ayarlarla kurulu olmadığından, kendi isteğimize uygun bir şekilde kurmak isteyebiliriz.
    • Kurmak istediğimiz programın lisansı başkalarına kullandırmamıza izin vermediği için kendimize özel bir alanda kurulu olması gerekiyor olabilir.


    sariyer kümesinde kurulu programlara bakmak

    Kendi ev dizinimize program kurmadan önce sariyer kümesinde kurulu programlara bakmak daha doğru olacaktır. Belki istediğimiz program zaten kuruludur. Yada hiç olmazsa kuracağımız programın gerektirdiği diğer yazılımlar kurulu olabilir. Bu şekilde kurulum işimiz çok daha kolay olacaktır.


    Bu amaçla öncelikle MODULE komutu ile hazır module dosyasına sahip yazılımları kontrol etmeliyiz. FFTW yazılımı için bu kontrolü yaparsak 2 adet FFTW modülünün sistemde olduğunu görebiliriz:


    FFTW/fftw-3.3.8-intel-2017.4
    FFTW/fftw-3.3.8-openmpi-1.8.4
    


    Hatta hazır slurm betiklerinin bulunduğu /okyanus/progs/slurm_betikleri/ dizinini de kontrol etmek mantıklı olacaktır.


    Bunun dışında Centos 7 linux sürümünün paket sistemi (rpm, yum) ile gelen yazılımlara da bakmak faydalı olacaktır:


    [mercan@sariyer fftw-3.3.8 ]$ rpm -qa |grep -i fftw
    fftw-libs-single-3.3.3-8.el7.x86_64
    fftw-libs-double-3.3.3-8.el7.x86_64
    [mercan@sariyer fftw-3.3.8 ]$
    


    Yukarıda 2 adet fftw sürümünün sistemde kurulu olduğu görülüyor.


    spack programı ile kolayca program kurmak

    Ayrıntılı açıklamalara geçmeden, spack programı ile kendi ev dizininize tek bir komut ile kolayca istediğiniz programları kurabileceğinizi hatırlatalım. Ne yazıkki tüm programlar için spack kurulumu hazır değil. Yine de, öncelikle spack ile kuruluma bir bakmanız uygun olacaktır. Bu konu spack ile kendi ev dizinimize program kurmak sayfasında ayrıntılı olarak anlatılmıştır.


    Kurulum Dökümanlarını Anlamak

    Pek çok programın kurulum dökümanı, Sizin belli bir işletim sisteminde bireysel bilgisayarınız için kurulum yapacağınız varsayımı ile yazılmıştır. Dahası, çoğu durumda kurulum dökümanları son derece yetersiz, dağınık yada yanlış anlaşılmaya müsait olabilir. Bu bazen programın kurulumu çok basit olduğu için yada programı yazanların programı geliştirmeye dökümanları hazırlamaktan daha fazla önem vermesinden kaynaklanabilir. Bazen dökümanlar programın kaynak kodu ile dağıtıldığı için web sayfasında uygun bilgi olmayabilir. Bazen de tersine web sayfası gerekli bilgilere sahipken, kaynak kodu içinde bilgi bulunmayabilir. Bu sebeble, işe girişmeden önce kurulum dökümanlarını iyice incelemek, hangi varsayımlar ile yazıldıklarını iyice anlamak yerinde olacaktır.


    Bu konuda dökümanları okurken cevabını aramamız gereken önemli sorular şunlardır:

    • Program, bizim işletim sistemimizde çalışabilir mi (sariyer kümesinde Centos 7 linux sürümü kuruludur)?
    • Programın gereksinim duyduğu yazılımlar (pre-request, dependencies, requirements) nedir?
    • Programın isteğe bağlı (opsiyonel) özellikleri için gerekli olan yazılımlar nedir? Bu özellikler bize lazım mı?
    • Program, derlenmiş olarak mı, yoksa kaynak kod paketi olarak mı dağıtılıyor?
    • Programın kaynak kodu tüm işletim sistemleri için tek bir paket halinde mi, yoksa değişik işletim sistemleri için farklı paketler mi var?
    • Program, derlemek için hangi araçların hangi sürümlerini destekliyor?
    • Programın değişik sürümlerinin gereksinimleri fark ediyor mu?
    • Program, bir bilgisayarda yada birden çok bilgisayarda paralel çalışmayı destekliyor mu? Nasıl?
    • Programın lisansı bizim onu sariyer kümesine kurup, kullanmamıza izin veriyor mu?


    Örnek bir kurulum: FFTW

    Teorik bir yazı yerine örnek bir uygulama ile kurulum aşamalarını anlatalım istedik. Bu amaçla genel bir fikir vermeye uygun bir yazılım olarak FFTW kütüphanesini seçtik. Bu kütüphanenin web sayfası http://www.fftw.org/ adresindedir.


    Yazılımın sayfasında Features bölümünde aşağıdaki bilgiler yer alıyor:


    Fftw-web.png


    Bu metinde yukarıdaki pek çok sorunun cevabını bulabiliyoruz:

    • Parallel transforms: parallelized code for platforms with SMP machines with some flavor of threads (e.g. POSIX) or OpenMP. : Burada bahsedilen SMP (threads) ve OpenMP, bu kütüphanenin tek bir makinada paralel çalışabildiğini gösteriyor.
    • An MPI version for distributed-memory transforms is also available in FFTW 3.3 : Bu cümle ile de birden çok bilgisayarda paralel çalışmanın desteklendiği bildiriliyor.
    • Portable to any platform with a C compiler : Buradanda C derleyicisine ihtiyacımız olduğu ve her türlü işletim sisteminde bu kütüphanenin çalışabileceğini anlıyoruz.
    • Free software, released under the GNU General Public License (GPL, see FFTW license) : Bu kısım ile programın istediğimiz gibi kullanabileceğimiz bir lisansı olduğunu görüyoruz.
    • FFTW 3.3.8 is the latest official version of FFTW : Son olarak bu ifade ile en güncel sürümün 3.3.8 sürümü olduğunu öğreniyoruz.


    Programın Downloads sayfasına gittiğimizde FFTW 3.3.8 bölümünde aşağıdaki bilgiler mevcut:

    Fftw-download.png


    Buradaki indirme linklerinin fftw-3.3.8.tar.gz şeklinde isimlendirildiği görülmekte. Dosyanın uzantısının .tar.gz olması, tar ve gzip programları ile kod dosyalarının paketlendiğini göstermekte. Şayet uzantı .tgz olsa idi de aynı şey demekti.


    Bir diğer satırda Go here for Windows. ifadesi bizi rahatlatıyor, çünkü bu durumda bu dosyaların unix(linux) için olduğunu anlıyoruz. Dahası Be sure to look at the installation section of the manual. ifadesi ile kurulum için bakmamız gereken dökümanlara link de verilmiş.


    Bir diğer bölüm ise Git repository bölümü. Günümüzde pek çok açık kaynak kodlu yazılım, github vb. bir sürüm takip sitesi üzerinde barındırılıyor. Bu yazılım da github sayfasına link vermiş. Burada dikkat edilmesi gereken şey; çoğu yazılım sürekli devam eden küçük değişiklikler ile yavaş yavaş geliştirilir. Bu değişiklikler düzgün çalışabilecekleri gibi, sorunlar (bug) da içerebilirler. Bu sebeble yazılım geliştiricileri belli aralıklarla yazılımın düzgün çalıştığına inandıkları bir aşamada, o anki halini bir sürüm numarası ile adlandırıp, bir paket oluştururlar. Bu sayede, kullanıcılar hem yazılımın hangi aşamadaki halini kullandıklarını bilebilirler, hem de nisbeten daha hatasız bir halini kullanmış olurlar. Bu sebeble yazılımların github vb. sitelerdeki son halini değil, bir resmi sürüm olarak paketlenmiş halini indirip, kullanmak en doğrusudur. Biz de github'dan enson halini indirmek yerine, en son resmi sürüm olan 3.3.8 sürümünü indireceğiz.



    Kaynak Kodu İndirmek

    Download sayfasındaki fftw-3.3.8.tar.gz linkine sağ tıklayarak yazılım paketinin adresini kopyalayabiliriz. Bu sayede sariyer makinasında doğrudan indirme işlemini wget komutuna bu adresi vererek yapabiliriz:


    [mercan@sariyer ~ ]$ wget http://www.fftw.org/fftw-3.3.8.tar.gz
    --2019-12-30 12:52:27--  http://www.fftw.org/fftw-3.3.8.tar.gz
    Resolving www.fftw.org (www.fftw.org)... 75.98.172.202
    Connecting to www.fftw.org (www.fftw.org)|75.98.172.202|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 4110137 (3.9M) [application/octet-stream]
    Saving to: ‘fftw-3.3.8.tar.gz’
    
    100%[=============================================================================================================================>] 4,110,137   1.17MB/s   in 3.7s
    
    2019-12-30 12:52:32 (1.07 MB/s) - ‘fftw-3.3.8.tar.gz’ saved [4110137/4110137]
    
    [mercan@sariyer ~ ]$
    


    Şifre ile girilen web sayfaları gibi bazı durumlarda, önce kendi bilgisayarımıza indirmek, oradan scp ile sariyer makinasına taşımak zorunda kalabiliriz.


    Sonuçta yazılımı indirdik. Şimdi istersek programın düzgün inip inmediğini md5sum komutu ile kontrol edebiliriz:


    [mercan@sariyer ~ ]$ md5sum fftw-3.3.8.tar.gz
    8aac833c943d8e90d51b697b27d4384d  fftw-3.3.8.tar.gz
    [mercan@sariyer ~ ]$
    


    Komutun çıktısında gözüken karekter dizisini (8aac833c943d8e90d51b697b27d4384d), programın web sayfasında verilen ile karşılaştırarak bir sorun olmadığından emin olabiliriz.


    Şimdi indirdiğimiz fftw-3.3.8.tar.gz paketini açalım:


    [mercan@sariyer ~ ]$ tar xfz fftw-3.3.8.tar.gz
    [mercan@sariyer ~ ]$
    


    tar komutu bu dosyayı açarak bulunduğumuz dizinde fftw-3.3.8 isimli bir dizin oluşturdu. Yazılımın kodları bu dizin içerisinde bulunmakta. Bu dizinin içeriğine bakalım ve o dizine geçelim:


    [mercan@sariyer ~ ]$ ls fftw-3.3.8
    aclocal.m4    cmake.config.h.in  config.sub    COPYRIGHT             FFTW3ConfigVersion.cmake.in  kernel       Makefile.in  README             tests
    api           CMakeLists.txt     configure     depcomp               fftw.pc.in                   libbench2    missing      README-perfcnt.md  threads
    AUTHORS       compile            configure.ac  dft                   genfft                       ltmain.sh    mpi          reodft             TODO
    bootstrap.sh  config.guess       CONVENTIONS   doc                   INSTALL                      m4           NEWS         simd-support       tools
    ChangeLog     config.h.in        COPYING       FFTW3Config.cmake.in  install-sh                   Makefile.am  rdft         support
    
    
    [mercan@sariyer ~ ]$ cd fftw-3.3.8/
    [mercan@sariyer fftw-3.3.8 ]$
    


    Derleme İşlemi

    Dizin içeriğine bakarsak, README ve INSTALL isimli iki dosya göreceğiz. README dosyası başlangıç için gereken bilgileri veren bir dosyadır. Bu dosyaya baktığımızda kurulum konusunda şu kısa bilginin yer aldığını göreceksiniz:


    INSTALLATION
    ------------
    
    INSTALLATION FROM AN OFFICIAL RELEASE:
    
    Please read chapter 10 "Installation and Customization" of the manual.
    In short:
    
         ./configure
         make
         make install
    
    

    Burada çok genel bir derleme işlem sırası gözükmekte. Pek çok açık kaynaklı program, GNU usulü derleme aşamaları olan ./configure && make && make install komutları ile derlenir. Bu aşamalar hakkındaki ayrıntılı bilgilere INSTALL dosyasından erişebiliriz. Benzer bilgiler FFTW web sayfasında da mevcuttur:


    Fftw-install.png


    ./configure && make && make install komutlarından:


    • make komutu, programı derler (compile eder).
    • make install derlenmiş programı olması gereken yere yerleştirir.
    • En baştaki ./configure ise, make komutunun derleme sırasında kullanacağı, ihtiyaç duyduğu kütüphanelerin var olup olmadığını kontrol ederek gerekli ayarlamaları yapar. İlaveten bizim istediğimiz bazı ayarlamaların yapılmasını sağlar.


    Bazı yazılımların kurulumunda ./configure && make && make install komutları yerine cmake komutunun kullanıldığını da görebiliriz. Genelde cmake komutu da configure betiği ile aynı şeyleri yapıp, arka planda make ve make install işlemlerini yapar. Sadece kullanımı biraz farklıdır.

    Programın gereksinim duyduğu yazılımları yüklemek

    Programın gereksinim duyduğu yazılımlar (pre-request, dependencies, requirements) programın kurulumuna geçilmeden kontrol edilmeli, mevcut değillerse kurulmalıdırlar. Bizim örneğimizde FFTW için belirtilmiş bir gereksinim gözükmemekte. Ancak bir gereksinimin açıkca belirtilmemesi, bir şeylere gereksiniminin olmadığını kanıtlamaz. Derleme sırasında, mesela configure yada cmake bir gereksinim bildirerek derlemeyi reddedebilir.


    Bazen kurulum adımlarında gereksinimleri sağlamak için çalıştırılması gereken komutlar listelendiğini görürüz. Mesela:


    sudo apt-get install curl mmv
    


    Yukarıda gözüken apt-get install komutu debian, ubuntu vb. dağıtımlarda paket kurmak için kullanılan ve root yetkisi gerektiren bir komuttur. Sariyer kümesinde Centos 7 yüklü olduğundan zaten apt-get komutu yoktur. Ancak olsa idi bile root yetkisi gerektirecekti. Kullanıcının root yetkisi elde etmesi için başına sudo komutu eklenmiştir. Bu ve benzeri iş yapan yum install, dnf install, aptitude install vb. paket kurulum komutlarının hepsi root yetkisi gerektirmektedirler, ve dahası herbiri belli bir linux dağıtımına özeldir.


    Çoğu durumda kullanıcının root yetkisi elde edebilmesi için başlarına sudo komutu ekli olarak yazılmışlardır. Ancak sudo ile root yetkisi elde etmek için de bir ayarlama gereklidir. sariyer kümesinde kullanıcılara root yetkisi verilmediğinden bu komutların sudo ile yada sudo olmadan yazılması hiçbir şeyi değiştirmez. Bu komutları kullanamazsınız.


    Dolayısı ile böyle bir komut gördüğünüzde bu komutu çalıştırmanızın bir anlamı yoktur. Zaten deneseniz de çalışmayacaktır:


    [mercan@sariyer fftw-3.3.8 ]$ sudo yum install curl
    
    We trust you have received the usual lecture from the local System
    Administrator. It usually boils down to these three things:
    
        #1) Respect the privacy of others.
        #2) Think before you type.
        #3) With great power comes great responsibility.
    
    [sudo] password for mercan:
    mercan is not in the sudoers file.  This incident will be reported.
    [mercan@sariyer fftw-3.3.8 ]$
    


    Böylesi bir satır gördüğümüzde, bu yazılımı kurmak için root yetkisi gerektiği anlamına gelmez. Sadece dökümanı hazırlayan Sizin kendi bilgisayarınıza kurulum yaptığınızı varsayarak, gereksinimleri kurmanın en kolay yolunu dökümana yazmıştır. Bu gereksinimleri de, aynı kurmak istediğimiz asıl yazılım gibi root yetkisi olmadan kendi ev dizinimize kurabiliriz. Ancak en mantıklısı öncelikle sistemde zaten yüklü olup, olmadığını kontrol etmektir. Bu kontrol bu yazının başında zaten anlatılmıştır.


    Benzer şekilde sistemdeki python sürümlerine pip install komutu ile paket kurmaya çalışırsak ta hata alırız, çünkü root yetkisine sahip değiliz:


    [mercan@sariyer fftw-3.3.8 ]$ pip install protobuf
    Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/lib64/python2.7/site-packages/numpy-1.13.3.dist-info/METADATA'
    Consider using the `--user` option or check the permissions.
    [mercan@sariyer fftw-3.3.8 ]$
    


    Bu sorunu da kendi ev dizinimize python virtual environment (virtualenv) kurulumu yaparak aşabiliriz.

    Yüklü yazılımları, kuracağımız programa kullandırmak

    Sisteme root yetkisi gerektiren bir yazılımı kendimiz kuramıyacağımızı gördük. Peki ama mevcut bir programı nasıl kullanacağız? Gerek kendi ev dizinimize kurulu bir program, gerekse sistemde zaten kurulu olan bir programı nasıl kuracağımız yazılımın kulllanmasını sağlayabiliriz?


    Aslında bu zannettiğimizden çok daha kolay! Mesela FFTW yazılımını derlerken MPI paketini kullanarak derlemek istersek, yapmamız gereken sadece yazılımın bakacağı çevre değişkenlerini uygun bir şekilde ayarlamaktan ibaret. Zaten module komutunun yaptığı şey de sadece bu ayarlamaları yapmak.


    Mesela mpi/openmpi-3.0.0-gcc-7.1.0 modulünün ne yaptığına bakarsak:


    [mercan@sariyer fftw-3.3.8 ]$ module show mpi/openmpi-3.0.0-gcc-7.1.0
    -------------------------------------------------------------------
    /okyanus/progs/modulefiles/mpi/openmpi-3.0.0-gcc-7.1.0:
    
    module-whatis	 openmpi @3.0.0 with gcc 7.1.0
    conflict	 mpi
    prepend-path	 PATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/bin
    prepend-path	 CMAKE_PREFIX_PATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/
    prepend-path	 LIBRARY_PATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/lib
    prepend-path	 LD_LIBRARY_PATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/lib
    prepend-path	 PKG_CONFIG_PATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/lib/pkgconfig
    prepend-path	 MANPATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/share/man
    prepend-path	 CPATH /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/include
    -------------------------------------------------------------------
    
    [mercan@sariyer fftw-3.3.8 ]$
    


    module load mpi/openmpi-3.0.0-gcc-7.1.0 komutu çalıştırıldığında yapılanlardan sadece en önemlilerini açıklarsak:


    • Yazdığımız komutların aranması için kullanılan PATH değişkenine /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/bin eklendiğini,
    • Derleme sırasında kütüphane araken nereye bakılacağını gösteren LIBRARY_PATH ve LD_LIBRARY_PATH değişkenlerine /okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/lib eklendiğini görüyoruz.


    Benzer şekilde kendimiz de, module komutunu kullanmadan, mesela /okyanus/users/mercan/openmpi-2.2.2 dizinindeki bir mpi sürümünü kullanılabilir yapmak istersek yapmamız gerekenler sadece şu komutları çalıştırmaktır:


    export PATH=/okyanus/users/mercan/openmpi-2.2.2/bin:$PATH
    export LIBRARY_PATH=/okyanus/users/mercan/openmpi-2.2.2/lib:$LIBRARY_PATH
    export LD_LIBRARY_PATH=/okyanus/users/mercan/openmpi-2.2.2/lib:$LD_LIBRARY_PATH
    


    Yukarıdaki export komutu açık bulunulan kabuk ortamında (shell environment) değişkenlerin değerini geçici olarak değiştirir. Bu değişiklik sadece komutu çalıştırdığımız kabuk için ve kapatılana kadar geçerlidir. Bahis konusu yazılımın kullanılması gerekli her durumda bu komutların uygun kabukta tekrar çalıştırılması gereklidir.

    configure

    configure komutu (betiği), yazılım için gereken kütüphanelerin sistemde yüklü olup olmadığını kontrol ederek, make komutu için gereken ayarlamaları yapar. Ayrıca bize ilave bazı tercihler yapabilmemiz için parametreler sunar.


    Bu komuta verebileceğimiz parametreler hakkında bilgi almak için configure betiğini, ./configure --help şeklinde çalıştırabiliriz:


    [mercan@sariyer fftw-3.3.8 ]$ ./configure --help
    `configure' configures fftw 3.3.8 to adapt to many kinds of systems.
    
    Usage: ./configure [OPTION]... [VAR=VALUE]...
    
    To assign environment variables (e.g., CC, CFLAGS...), specify them as
    VAR=VALUE.  See below for descriptions of some of the useful variables.
    
    Defaults for the options are specified in brackets.
    
    Configuration:
      -h, --help              display this help and exit
          --help=short        display options specific to this package
          --help=recursive    display the short help of all the included packages
      -V, --version           display version information and exit
      -q, --quiet, --silent   do not print `checking ...' messages
          --cache-file=FILE   cache test results in FILE [disabled]
      -C, --config-cache      alias for `--cache-file=config.cache'
      -n, --no-create         do not create output files
          --srcdir=DIR        find the sources in DIR [configure dir or `..']
    
    Installation directories:
      --prefix=PREFIX         install architecture-independent files in PREFIX
                              [/usr/local]
      --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                              [PREFIX]
    
    By default, `make install' will install all the files in
    `/usr/local/bin', `/usr/local/lib' etc.  You can specify
    an installation prefix other than `/usr/local' using `--prefix',
    for instance `--prefix=$HOME'.
    
    For better control, use the options below.
    
    Fine tuning of the installation directories:
      --bindir=DIR            user executables [EPREFIX/bin]
      --sbindir=DIR           system admin executables [EPREFIX/sbin]
      --libexecdir=DIR        program executables [EPREFIX/libexec]
      --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
      --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
      --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
      --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
      --libdir=DIR            object code libraries [EPREFIX/lib]
      --includedir=DIR        C header files [PREFIX/include]
      --oldincludedir=DIR     C header files for non-gcc [/usr/include]
      --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
      --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
      --infodir=DIR           info documentation [DATAROOTDIR/info]
      --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
      --mandir=DIR            man documentation [DATAROOTDIR/man]
      --docdir=DIR            documentation root [DATAROOTDIR/doc/fftw]
      --htmldir=DIR           html documentation [DOCDIR]
      --dvidir=DIR            dvi documentation [DOCDIR]
      --pdfdir=DIR            pdf documentation [DOCDIR]
      --psdir=DIR             ps documentation [DOCDIR]
    
    Program names:
      --program-prefix=PREFIX            prepend PREFIX to installed program names
      --program-suffix=SUFFIX            append SUFFIX to installed program names
      --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
    
    System types:
      --build=BUILD     configure for building on BUILD [guessed]
      --host=HOST       cross-compile to build programs to run on HOST [BUILD]
    
    Optional Features:
      --disable-option-checking  ignore unrecognized --enable/--with options
      --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
      --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
      --enable-silent-rules   less verbose build output (undo: "make V=1")
      --disable-silent-rules  verbose build output (undo: "make V=0")
      --enable-maintainer-mode
                              enable make rules and dependencies not useful (and
                              sometimes confusing) to the casual installer
      --enable-shared[=PKGS]  build shared libraries [default=no]
      --enable-debug          compile fftw with extra runtime checks for debugging
      --disable-doc           disable building the documentation
      --enable-random-estimator
                              enable pseudorandom estimator (debugging hack)
      --disable-alloca        disable use of the alloca() function (may be broken
                              on mingw64)
      --enable-single         compile fftw in single precision
      --enable-float          synonym for --enable-single
      --enable-long-double    compile fftw in long-double precision
      --enable-quad-precision compile fftw in quadruple precision if available
      --enable-sse            enable SSE optimizations
      --enable-sse2           enable SSE/SSE2 optimizations
      --enable-avx            enable AVX optimizations
      --enable-avx2           enable AVX2 optimizations
      --enable-avx512         enable AVX512 optimizations
      --enable-avx-128-fma    enable AVX128/FMA optimizations
      --enable-kcvi           enable Knights Corner vector instructions
                              optimizations
      --enable-altivec        enable Altivec optimizations
      --enable-vsx            enable IBM VSX optimizations
      --enable-neon           enable ARM NEON optimizations
      --enable-armv8-pmccntr-el0
                              enable the cycle counter on ARMv8 via the
                              PMCCNTR_EL0 register (see README-perfcounters for
                              details and mandatory instructions)
      --enable-armv8-cntvct-el0
                              enable the cycle counter on ARMv8 via the CNTVCT_EL0
                              register (see README-perfcounters for details and
                              mandatory instructions)
      --enable-armv7a-cntvct  enable the cycle counter on Armv7a via the CNTVCT
                              register (see README-perfcounters for details and
                              mandatory instructions)
      --enable-armv7a-pmccntr enable the cycle counter on Armv7a via the PMCCNTR
                              register (see README-perfcounters for details and
                              mandatory instructions)
      --enable-generic-simd128
                              enable generic (gcc) 128-bit SIMD optimizations
      --enable-generic-simd256
                              enable generic (gcc) 256-bit SIMD optimizations
      --enable-mips-zbus-timer
                              use MIPS ZBus cycle-counter
      --enable-fma            enable if the machine architecture "naturally"
                              prefers fused multiply-add instructions
      --enable-dependency-tracking
                              do not reject slow dependency extractors
      --disable-dependency-tracking
                              speeds up one-time build
      --enable-static[=PKGS]  build static libraries [default=yes]
      --enable-fast-install[=PKGS]
                              optimize for fast installation [default=yes]
      --disable-libtool-lock  avoid locking (might break parallel builds)
      --enable-mpi            compile FFTW MPI library
      --disable-fortran       don't include Fortran-callable wrappers
      --enable-openmp         use OpenMP directives for parallelism
      --enable-threads        compile FFTW SMP threads library
    
    Optional Packages:
      --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
      --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
      --with-slow-timer       use low-precision timers (SLOW)
      --with-our-malloc       use our aligned malloc (helpful for Win32)
      --with-our-malloc16     Obsolete alias for --with-our-malloc16
      --with-windows-f77-mangling
                              use common Win32 Fortran interface styles
      --with-incoming-stack-boundary=X
                              Assume that stack is aligned to (1<<X) bytes
      --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
                              both]
      --with-aix-soname=aix|svr4|both
                              shared library versioning (aka "SONAME") variant to
                              provide on AIX, [default=aix].
      --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
      --with-sysroot[=DIR]    Search for dependent libraries within DIR (or the
                              compiler's sysroot if not specified).
      --with-g77-wrappers     force inclusion of g77-compatible wrappers in
                              addition to any other Fortran compiler that is
                              detected
      --with-combined-threads combine threads into main libfftw3
    
    Some influential environment variables:
      CC          C compiler command
      CFLAGS      C compiler flags
      LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
                  nonstandard directory <lib dir>
      LIBS        libraries to pass to the linker, e.g. -l<library>
      CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
                  you have headers in a nonstandard directory <include dir>
      LT_SYS_LIBRARY_PATH
                  User-defined run-time library search path.
      CPP         C preprocessor
      MPICC       MPI C compiler command
      F77         Fortran 77 compiler command
      FFLAGS      Fortran 77 compiler flags
    
    Use these variables to override the choices made by `configure' or to help
    it to find libraries and programs with nonstandard names/locations.
    
    Report bugs to <fftw@fftw.org>.
    [mercan@sariyer fftw-3.3.8 ]$
    


    Gördüğünüz gibi pek çok parametre listelendi. Bu çıktıda kısa açıklamalar mevcutsa da, daha fazla açıklamaya ihtiyaç duyarsak INSTALL dosyasında da ilave bilgi mevcuttur.


    Bir çok yazılımın configure betiği, bu parametrelerin çoğunu ve başka ilave parametreleri içerir. Yani, genel yapı hemen hepsinde aynıdır.


    Bizim için ilk bakışta önemli olan parametreleri açıklarsak:


    • --prefix=PREFIX : Bu parametre, derlenen yazılımın normalde duracağı /usr/local dizini yerine bizim istediğimiz başka bir dizine konmasını sağlar.
    • --enable-mpi : Bu parametre, birden fazla makinada çalışabilen MPI ile paralelleşmiş bir FFTW derlenmesini sağlar.
    • --enable-openmp : Bu parametre, bir makinada çalışabilien OpenMP ile paralelleşmiş bir FFTW derlenmesini sağlar.
    • CC= : Bu parametre ile, yazılımın hangi c derleyicisi ile derleneceğini ayarlayabiliriz.


    Biz birden fazla makinada kullanabilmek için MPI ile paralelleşmiş bir FFTW derlenmek istiyoruz dolayısı ile, configure betiğine --enable-mpi parametresini vereceğiz. Ancak sadece --enable-mpi parametresini vermek yeterli olmayacak, çevre değişkenlerini ayarlayarak, configure betiğinin bizim istediğimiz MPI sürümünü bulmasını sağlamalıyız. Bu amaçla seçtiğimiz mpi sürümü için module load mpi/openmpi-3.0.0-gcc-7.1.0 komutunu önceden çalıştırarak gerekli ayarlamaların yapılmasını sağlamalıyız.


    Bu yazılımı kendi ev dizinimize kurmak istediğimiz için --prefix=/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0 parametresini de vereceğiz. Dizinin ismini seçerken anlaşılır olması önemlidir. Ayrıca sorun çıkmaması için tam yol (full path) vermek gereklidir.


    Sonuçta çalıştıracağımız configure betiği aşağıdaki gibidir:


    [mercan@sariyer fftw-3.3.8 ]$ ./configure --prefix=/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0 --enable-mpi
    
    checking for a BSD-compatible install... /bin/install -c
    checking whether build environment is sane... yes
    checking for a thread-safe mkdir -p... /bin/mkdir -p
    checking for gawk... gawk
    checking whether make sets $(MAKE)... yes
    checking whether make supports nested variables... yes
    checking whether to enable maintainer-specific portions of Makefiles... no
    checking build system type... x86_64-pc-linux-gnu
    checking host system type... x86_64-pc-linux-gnu
    checking for gcc... gcc
    checking whether the C compiler works... yes
    checking for C compiler default output file name... a.out
    checking for suffix of executables...
    checking whether we are cross compiling... no
    checking for suffix of object files... o
    checking whether we are using the GNU C compiler... yes
    checking whether gcc accepts -g... yes
    checking for gcc option to accept ISO C89... none needed
    checking whether gcc understands -c and -o together... yes
    checking for style of include used by make... GNU
    checking dependency style of gcc... gcc3
    checking for C compiler vendor... gnu
    checking for gcc option to accept ISO C99... none needed
    checking for gcc option to accept ISO Standard C... (cached) none needed
    checking whether ln -s works... yes
    checking whether make sets $(MAKE)... (cached) yes
    
     . . . . .
    
    checking how to get verbose linking output from gfortran... -v
    checking for Fortran 77 libraries of gfortran...  -L/okyanus/progs/gcc/GCC-7.1.0/lib64/../lib64 -L/okyanus/progs/gcc/GCC-7.1.0/lib/../lib64 -L/okyanus/progs/gcc/GCC-7.1.0/lib/gcc/x86_64-pc-linux-gnu/7.1.0 -L/okyanus/progs/gcc/GCC-7.1.0/lib/gcc/x86_64-pc-linux-gnu/7.1.0/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/lib -L/okyanus/progs/gcc/GCC-7.1.0/lib64 -L/okyanus/progs/gcc/GCC-7.1.0/lib -L/okyanus/progs/gcc/GCC-7.1.0/lib/gcc/x86_64-pc-linux-gnu/7.1.0/../../.. -lgfortran -lm -lquadmath
    checking for dummy main to link with Fortran 77 libraries... none
    checking for Fortran 77 name-mangling scheme... lower case, underscore, no extra underscore
    checking whether a cycle counter is available... yes
    checking that generated files are newer than configure... done
    configure: creating ./config.status
    config.status: creating Makefile
    config.status: creating support/Makefile
    config.status: creating genfft/Makefile
    config.status: creating kernel/Makefile
    config.status: creating simd-support/Makefile
    config.status: creating dft/Makefile
    config.status: creating dft/scalar/Makefile
    config.status: creating dft/scalar/codelets/Makefile
    config.status: creating dft/simd/Makefile
    config.status: creating dft/simd/common/Makefile
    config.status: creating dft/simd/sse2/Makefile
    config.status: creating dft/simd/avx/Makefile
    config.status: creating dft/simd/avx-128-fma/Makefile
    config.status: creating dft/simd/avx2/Makefile
    config.status: creating dft/simd/avx2-128/Makefile
    config.status: creating dft/simd/avx512/Makefile
    config.status: creating dft/simd/kcvi/Makefile
    config.status: creating dft/simd/altivec/Makefile
    config.status: creating dft/simd/vsx/Makefile
    config.status: creating dft/simd/neon/Makefile
    config.status: creating dft/simd/generic-simd128/Makefile
    config.status: creating dft/simd/generic-simd256/Makefile
    config.status: creating rdft/Makefile
    config.status: creating rdft/scalar/Makefile
    config.status: creating rdft/scalar/r2cf/Makefile
    config.status: creating rdft/scalar/r2cb/Makefile
    config.status: creating rdft/scalar/r2r/Makefile
    config.status: creating rdft/simd/Makefile
    config.status: creating rdft/simd/common/Makefile
    config.status: creating rdft/simd/sse2/Makefile
    config.status: creating rdft/simd/avx/Makefile
    config.status: creating rdft/simd/avx-128-fma/Makefile
    config.status: creating rdft/simd/avx2/Makefile
    config.status: creating rdft/simd/avx2-128/Makefile
    config.status: creating rdft/simd/avx512/Makefile
    config.status: creating rdft/simd/kcvi/Makefile
    config.status: creating rdft/simd/altivec/Makefile
    config.status: creating rdft/simd/vsx/Makefile
    config.status: creating rdft/simd/neon/Makefile
    config.status: creating rdft/simd/generic-simd128/Makefile
    config.status: creating rdft/simd/generic-simd256/Makefile
    config.status: creating reodft/Makefile
    config.status: creating threads/Makefile
    config.status: creating api/Makefile
    config.status: creating mpi/Makefile
    config.status: creating libbench2/Makefile
    config.status: creating tests/Makefile
    config.status: creating doc/Makefile
    config.status: creating doc/FAQ/Makefile
    config.status: creating tools/Makefile
    config.status: creating tools/fftw_wisdom.1
    config.status: creating tools/fftw-wisdom-to-conf
    config.status: creating m4/Makefile
    config.status: creating fftw.pc
    config.status: creating config.h
    config.status: executing depfiles commands
    config.status: executing libtool commands
    
    [mercan@sariyer fftw-3.3.8 ]$
    


    configure betiği pek çok şeyi kontrol ettikten sonra, hata vermeden sonlandı. Eğer ihtiyaç duyulanlardan birini bulamasa idi hata vererek yarıda kesilecekti.

    make

    ./configure && make && make install komutlarından sıra make komutunu çalıştırmaya geldi. Bu aşama gerçekten programın derlendiği aşamadır. Büyük yazılımlar için çok uzun sürebilir. Bir çok büyük yazılım derleme süresini kısalmak için paralel çalışmayı da destekler. Genelde make -j İŞLEMCİ_SAYISI şeklinde istenen sayıda işlemci kullanılarak yapılabilir. Bizim derleyeceğimiz yazılım nisbeten küçük olduğundan paralel derlemeye gerek yok. Sadece make komutunu çalıştıracağız:


    [mercan@sariyer fftw-3.3.8 ]$ make
    
    make  all-recursive
    make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8'
    Making all in support
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/support'
    make[2]: Nothing to be done for `all'.
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/support'
    Making all in kernel
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/kernel'
    /bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..  -I ..   -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT align.lo -MD -MP -MF .deps/align.Tpo -c -o align.lo align.c
    libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -I .. -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT align.lo -MD -MP -MF .deps/align.Tpo -c align.c -o align.o
    mv -f .deps/align.Tpo .deps/align.Plo
    /bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..  -I ..   -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT alloc.lo -MD -MP -MF .deps/alloc.Tpo -c -o alloc.lo alloc.c
    libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -I .. -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT alloc.lo -MD -MP -MF .deps/alloc.Tpo -c alloc.c -o alloc.o
    mv -f .deps/alloc.Tpo .deps/alloc.Plo
    /bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..  -I ..   -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT assert.lo -MD -MP -MF .deps/assert.Tpo -c -o assert.lo assert.c
    libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -I .. -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT assert.lo -MD -MP -MF .deps/assert.Tpo -c assert.c -o assert.o
    mv -f .deps/assert.Tpo .deps/assert.Plo
    
       .  .   .   .
    
    /bin/sh ../libtool  --tag=CC   --mode=link mpicc  -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns   -o mpi-bench mpi_bench-mpi-bench.o mpi_bench-fftw-bench.o mpi_bench-hook.o libfftw3_mpi.la  ../libfftw3.la ../libbench2/libbench2.a   -lm
    libtool: link: mpicc -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -o mpi-bench mpi_bench-mpi-bench.o mpi_bench-fftw-bench.o mpi_bench-hook.o  ./.libs/libfftw3_mpi.a /okyanus/users/mercan/fftw-3.3.8/.libs/libfftw3.a ../.libs/libfftw3.a ../libbench2/libbench2.a -lm
    make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi'
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi'
    Making all in doc
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc'
    Making all in FAQ
    make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ'
    make[3]: Nothing to be done for `all'.
    make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ'
    make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc'
    make[3]: Nothing to be done for `all-am'.
    make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc'
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc'
    Making all in tools
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/tools'
    rm -f fftw-wisdom.1
    cp fftw_wisdom.1 fftw-wisdom.1
    make  all-am
    make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/tools'
    gcc -DHAVE_CONFIG_H -I. -I..  -I ..   -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -MT fftw_wisdom-fftw-wisdom.o -MD -MP -MF .deps/fftw_wisdom-fftw-wisdom.Tpo -c -o fftw_wisdom-fftw-wisdom.o `test -f 'fftw-wisdom.c' || echo './'`fftw-wisdom.c
    mv -f .deps/fftw_wisdom-fftw-wisdom.Tpo .deps/fftw_wisdom-fftw-wisdom.Po
    /bin/sh ../libtool  --tag=CC   --mode=link gcc  -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns   -o fftw-wisdom fftw_wisdom-fftw-wisdom.o ../tests/bench-bench.o ../tests/bench-fftw-bench.o  ../libfftw3.la ../libbench2/libbench2.a  -lm
    libtool: link: gcc -O3 -fomit-frame-pointer -mtune=native -malign-double -fstrict-aliasing -fno-schedule-insns -o fftw-wisdom fftw_wisdom-fftw-wisdom.o ../tests/bench-bench.o ../tests/bench-fftw-bench.o  ../.libs/libfftw3.a ../libbench2/libbench2.a -lm
    make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools'
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools'
    Making all in m4
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/m4'
    make[2]: Nothing to be done for `all'.
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/m4'
    make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8'
    
    [mercan@sariyer fftw-3.3.8 ]$
    


    Yine sorun yaşamadık. Sorun yaşasa idik işlem yarıda kesilecekti. Ancak bazen make düzgün tamamlanmış gibi gözükse de sorun yaşanmış olabiliyor. Ayrıca çok sayıda çıktı satırları arasındaki mesajlar gözden kaçabiliyor. Bu sebeble Size tavsiyem ilk make komutu bitince, aynı make komutunu tekrar çalıştırmak. Yazılım zaten derlenmiş olduğu için, bu seferki çıktıda hiç gcc (derleyici) satırları olmamalı ve çok daha hızlı bir şekilde bitmeli:


    [mercan@sariyer fftw-3.3.8 ]$ make
    make  all-recursive
    make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8'
    Making all in support
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/support'
    make[2]: Nothing to be done for `all'.
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/support'
    Making all in kernel
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/kernel'
    make[2]: Nothing to be done for `all'.
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/kernel'
    Making all in simd-support
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/simd-support'
    make[2]: Nothing to be done for `all'.
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/simd-support'
    Making all in dft
    
        .   .   .   .
    
    make  all-am
    make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/mpi'
    make[3]: Nothing to be done for `all-am'.
    make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi'
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi'
    Making all in doc
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc'
    Making all in FAQ
    make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ'
    make[3]: Nothing to be done for `all'.
    make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ'
    make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc'
    make[3]: Nothing to be done for `all-am'.
    make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc'
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc'
    Making all in tools
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/tools'
    make  all-am
    make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/tools'
    make[3]: Nothing to be done for `all-am'.
    make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools'
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools'
    Making all in m4
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/m4'
    make[2]: Nothing to be done for `all'.
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/m4'
    make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8'
    
    [mercan@sariyer fftw-3.3.8 ]$
    


    Bu aşamadan sonra make install aşamasına geçebiliriz. Ancak pek çok defa doğru derlenmiş gibi gözüken yazılımın kullanmaya çalışıldığında sorun çıkardığına rastlamışızdır. Bu durumu test etmek için pek çok yazılım, derlenmiş halini kullanarak testler yapan seçenekler sunar. Örneğin make test, yada make check gibi. FFTW yazılımı da böyle bir test sunuyor: make check. Bu testleri çalıştırmanızı tavsiye ederiz.


    Çıktısını burada vermeyeceğiz ama biz de bu testi çalıştırdık ve testler başarı ile sonuçlandı. Artık bir sonraki aşamaya geçebiliriz.

    make install

    Normalde bu yazılımı ./configure betiğine --prefix= parametresi vermeden çalıştırsa idik, bu aşamada root yetkisine ihtiyaç duyacaktık. Çünkü, make install derlenmiş yazılımı alıp, /usr/local dizinine koymaya çalışacaktı. Normal kullanıcının bu dizine yazma hakkı bulunmadığı için de hata verecekti.


    Ancak biz derleme öncesinde ./configure betiğine --prefix= parametresi verdiğimiz için bizim söylediğimiz dizine derlediğimiz programı koyacak ve bu dizin de bizim ev dizinimizde olduğu için bir sorunla karşılaşmamalıyız:


    [mercan@sariyer fftw-3.3.8 ]$ make install
    Making install in support
    make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/support'
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/support'
    make[2]: Nothing to be done for `install-exec-am'.
    make[2]: Nothing to be done for `install-data-am'.
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/support'
    make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/support'
    Making install in kernel
    make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/kernel'
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/kernel'
    make[2]: Nothing to be done for `install-exec-am'.
    make[2]: Nothing to be done for `install-data-am'.
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/kernel'
    make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/kernel'
    
        .  .  .  . 
    
    Making install in .
    make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8'
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8'
     /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib'
     /bin/sh ./libtool   --mode=install /bin/install -c   libfftw3.la '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib'
    libtool: install: /bin/install -c .libs/libfftw3.lai /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3.la
    libtool: install: /bin/install -c .libs/libfftw3.a /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3.a
    libtool: install: chmod 644 /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3.a
    libtool: install: ranlib /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3.a
    libtool: finish: PATH="/okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/bin:/okyanus/progs/gcc/GCC-7.1.0/bin:/usr/lib64/qt-3.3/bin:/okyanus/progs/uhem-bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin" ldconfig -n /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib
    ----------------------------------------------------------------------
    Libraries have been installed in:
       /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib
    
    If you ever happen to want to link against installed libraries
    in a given directory, LIBDIR, you must either use libtool, and
    specify the full pathname of the library, or use the '-LLIBDIR'
    flag during linking and do at least one of the following:
       - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
         during execution
       - add LIBDIR to the 'LD_RUN_PATH' environment variable
         during linking
       - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
       - have your system administrator add LIBDIR to '/etc/ld.so.conf'
    
    See any operating system documentation about shared libraries for
    more information, such as the ld(1) and ld.so(8) manual pages.
    ----------------------------------------------------------------------
     /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/cmake/fftw3'
     /bin/install -c -m 644 FFTW3Config.cmake FFTW3ConfigVersion.cmake '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/cmake/fftw3'
     /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/pkgconfig'
     /bin/install -c -m 644 fftw3.pc '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/pkgconfig'
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8'
    make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8'
    Making install in threads
    make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/threads'
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/threads'
    make[2]: Nothing to be done for `install-data-am'.
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/threads'
    make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/threads'
    Making install in tests
    make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/tests'
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/tests'
    make[2]: Nothing to be done for `install-exec-am'.
    make[2]: Nothing to be done for `install-data-am'.
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tests'
    make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tests'
    Making install in mpi
    make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/mpi'
    make  install-am
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/mpi'
    make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/mpi'
     /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib'
     /bin/sh ../libtool   --mode=install /bin/install -c   libfftw3_mpi.la '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib'
    libtool: install: /bin/install -c .libs/libfftw3_mpi.lai /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3_mpi.la
    libtool: install: /bin/install -c .libs/libfftw3_mpi.a /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3_mpi.a
    libtool: install: chmod 644 /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3_mpi.a
    libtool: install: ranlib /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/libfftw3_mpi.a
    libtool: finish: PATH="/okyanus/progs/openmpi/openmpi-3.0.0-gcc-7.1.0/bin:/okyanus/progs/gcc/GCC-7.1.0/bin:/usr/lib64/qt-3.3/bin:/okyanus/progs/uhem-bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin" ldconfig -n /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib
    ----------------------------------------------------------------------
    Libraries have been installed in:
       /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib
    
    If you ever happen to want to link against installed libraries
    in a given directory, LIBDIR, you must either use libtool, and
    specify the full pathname of the library, or use the '-LLIBDIR'
    flag during linking and do at least one of the following:
       - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
         during execution
       - add LIBDIR to the 'LD_RUN_PATH' environment variable
         during linking
       - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
       - have your system administrator add LIBDIR to '/etc/ld.so.conf'
    
    See any operating system documentation about shared libraries for
    more information, such as the ld(1) and ld.so(8) manual pages.
    ----------------------------------------------------------------------
     /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/include'
     /bin/install -c -m 644 fftw3-mpi.h '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/include'
     /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/include'
     /bin/install -c -m 644 fftw3-mpi.f03 fftw3l-mpi.f03 '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/include'
    make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi'
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi'
    make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/mpi'
    Making install in doc
    make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc'
    Making install in FAQ
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ'
    make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ'
    make[3]: Nothing to be done for `install-exec-am'.
    make[3]: Nothing to be done for `install-data-am'.
    make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ'
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/doc/FAQ'
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc'
    make[3]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/doc'
     /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/bin'
     /bin/install -c fftw-wisdom-to-conf '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/bin'
     /bin/mkdir -p '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/share/man/man1'
     /bin/install -c -m 644 fftw-wisdom-to-conf.1 fftw-wisdom.1 '/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/share/man/man1'
    make[3]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools'
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools'
    make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/tools'
    Making install in m4
    make[1]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/m4'
    make[2]: Entering directory `/okyanus/users/mercan/fftw-3.3.8/m4'
    make[2]: Nothing to be done for `install-exec-am'.
    make[2]: Nothing to be done for `install-data-am'.
    make[2]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/m4'
    make[1]: Leaving directory `/okyanus/users/mercan/fftw-3.3.8/m4'
    
    [mercan@sariyer fftw-3.3.8 ]$
    


    Çıktıya bakarsanız bize, LD_LIBRARY_PATH değişkenine /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib dizini eklememiz gerektiğini söylüyor. Hatırlarsanız, kendi ev dizinimizdeki kütüphaneleri kullanmak için bazı değişkenleri tanımlamamızın yeterli olacağını Yüklü yazılımları, kuracağımız programa kullandırmak bölümünde anlatmıştık.


    Gelin FFTW yazılımının kurulduğu /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0 dizinin ve alt dizinlerinin içeriğine bakalım:


    [mercan@sariyer fftw-3.3.8 ]$ ls /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/
    bin  include  lib  share
    
    [mercan@sariyer fftw-3.3.8 ]$ ls /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib/
    cmake  libfftw3.a  libfftw3.la  libfftw3_mpi.a  libfftw3_mpi.la  pkgconfig
    
    [mercan@sariyer fftw-3.3.8 ]$ ls /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/bin/
    fftw-wisdom  fftw-wisdom-to-conf
    
    [mercan@sariyer fftw-3.3.8 ]$ ls /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/share/
    info  man
    
    [mercan@sariyer fftw-3.3.8 ]$ ls /okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/include/
    fftw3.f  fftw3.f03  fftw3.h  fftw3l.f03  fftw3l-mpi.f03  fftw3-mpi.f03  fftw3-mpi.h  fftw3q.f03
    
    [mercan@sariyer fftw-3.3.8 ]$
    


    Burada bin dizini komutları, lib dizini kütüphane dosyalarını, include dizini başlık dosyalarını (header files), share dizini ise man ve info dosyalarını içeriyor.


    Bu yazılımı her kullanmak kullanmak istediğimizde, önce module load mpi/openmpi-3.0.0-gcc-7.1.0 komutu çalıştırılmalıdır. Sonrasında da yazılımın bulunduğu dizinler ilgili çevre değişkenlerine eklenmelidir:


    export PATH=/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/bin:$PATH
    export LIBRARY_PATH=/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib:$LIBRARY_PATH
    export LD_LIBRARY_PATH=/okyanus/users/mercan/fftw-3.3.8-openmpi-3.0.0-gcc-7.1.0/lib:$LD_LIBRARY_PATH
    


    Artık işimiz bittiğine göre istersek derleme yaptığımız fftw-3.3.8 dizini silebiliriz.