cmake_minimum_required(VERSION 3.9)
project(eecs398_search)

set(CMAKE_CXX_STANDARD 11)

add_executable(QueueTest
        shared/ProducerConsumerQueue.h
        shared/ProducerConsumerQueue_test.cpp)

add_executable(TryPopTest
        shared/TryPopTest.cpp
        shared/ProducerConsumerQueue.h
        shared/ThreadClass.h
        shared/url.h
        crawler/crawler.cpp
        crawler/UrlFrontier.cpp
        crawler/Readers/StreamReader.h
        crawler/Readers/HttpReader.cpp
        crawler/Readers/HttpsReader.cpp
        crawler/Readers/LocalReader.cpp
        crawler/spider.cpp
        util/util.cpp
        shared/Document.cpp
        parser/Parser.cpp
        util/Stemmer.cpp
        util/Tokenizer.cpp
        util/stringProcessing.cpp
        indexer/Indexer.cpp
        )

add_executable(crawler-parser-Test
        main.cpp
        shared/ProducerConsumerQueue.h
        shared/ThreadClass.h
        shared/url.h
        crawler/crawler.cpp
        crawler/UrlFrontier.cpp
        crawler/Readers/StreamReader.h
        crawler/Readers/HttpReader.cpp
        crawler/Readers/HttpsReader.cpp
        crawler/Readers/LocalReader.cpp
        crawler/spider.cpp
        util/util.cpp
        shared/Document.cpp
        parser/Parser.cpp
        util/Stemmer.cpp
        util/Tokenizer.cpp
        util/stringProcessing.cpp
        indexer/Indexer.cpp)


add_executable(crawler-parser-indexer-Test
        main.cpp
        shared/ProducerConsumerQueue.h
        shared/ThreadClass.h
        shared/url.h
        crawler/crawler.cpp
        crawler/UrlFrontier.cpp
        crawler/Readers/StreamReader.h
        crawler/Readers/HttpReader.cpp
        crawler/Readers/HttpsReader.cpp
        crawler/Readers/LocalReader.cpp
        crawler/spider.cpp
        util/util.cpp
        shared/Document.cpp
        parser/Parser.cpp
        util/Stemmer.cpp
        util/Tokenizer.cpp
        util/stringProcessing.cpp
        indexer/Indexer.cpp)



add_executable(isolated-integration
        crawler/tests/crawlerTest.cpp
        shared/ProducerConsumerQueue.h
        shared/ThreadClass.h
        crawler/UrlFrontier.cpp
        shared/url.h
        crawler/crawler.cpp
        crawler/Readers/StreamReader.h
        crawler/Readers/HttpReader.cpp
        crawler/Readers/HttpsReader.cpp
        crawler/Readers/LocalReader.cpp
        crawler/spider.cpp
        util/util.cpp
        shared/Document.cpp
        parser/Parser.cpp
        util/Stemmer.cpp
        util/Tokenizer.cpp
        util/stringProcessing.cpp
        indexer/Indexer.cpp)




add_executable(url-frontier-test
        crawler/tests/urlFrontierTest.cpp
        shared/ProducerConsumerQueue.h
        shared/ThreadClass.h
        shared/url.h
        crawler/crawler.cpp
        crawler/UrlFrontier.cpp
        crawler/Readers/StreamReader.h
        crawler/Readers/HttpReader.cpp
        crawler/Readers/HttpsReader.cpp
        crawler/Readers/LocalReader.cpp
        crawler/spider.cpp
        util/util.cpp
        shared/Document.cpp
        parser/Parser.cpp
        util/Stemmer.cpp
        util/Tokenizer.cpp
        util/stringProcessing.cpp
        indexer/Indexer.cpp)

add_executable(StringProcessingTest
        util/stringProcessing.cpp
        util/Stemmer.cpp
        util/tests/stringProcessingTest.cpp)

add_executable(TokenizerTest
        util/Tokenizer.cpp
        util/stringProcessing.cpp
        util/Stemmer.cpp
        util/tests/tokenizerTest.cpp)

add_executable(StemmerTest
        util/stringProcessing.cpp
        util/Stemmer.cpp
        util/tests/stemmerTest.cpp)

add_executable(ParserTest
        parser/Parser.cpp
        shared/Document.cpp
        shared/url.h
        util/util.cpp
        util/Tokenizer.cpp
        shared/ProducerConsumerQueue.h
        util/stringProcessing.cpp
        util/Stemmer.cpp
        crawler/UrlFrontier.cpp
        parser/tests/parserTest.cpp
        crawler/Readers/StreamReader.h
        crawler/Readers/LocalReader.cpp
        crawler/Readers/HttpReader.cpp
        crawler/Readers/HttpsReader.cpp)

add_executable(SharedTableTest
        shared/SharedHashMapTest.cpp )

add_executable(URLTEST
        shared/url.h
        shared/urlTest.cpp
        util/stringProcessing.cpp
        util/Stemmer.cpp

        )

add_executable(search-engine
        search.cpp
        query/Searcher.cpp
        util/DataStructureLib/tuple.cpp
        util/stringProcessing.cpp
        util/Stemmer.cpp
        util/util.cpp
        constraintSolver/ISRContainer.cpp
        constraintSolver/ISR.h
        query/Ranker/Ranker.cpp
        indexer/Corpus.cpp
        indexer/Chunk.cpp
        query/Ranker/Site.cpp
        query/Ranker/Scorer.cpp
        query/queryLanguage/QueryParser.cpp
        constraintSolver/ISREndDoc.cpp
        constraintSolver/ISRWord.cpp
        constraintSolver/ISRAnd.cpp
        constraintSolver/ISROr.cpp)


add_executable(ISRWord-tests
        util/util.cpp
        constraintSolver/ISRWord.cpp
        constraintSolver/tests/ISRWordTests.cpp
        constraintSolver/ISREndDoc.cpp
        util/stringProcessing.cpp
        indexer/Chunk.cpp
        indexer/Corpus.cpp
        util/Stemmer.cpp )

add_executable(ISREndDoc-tests
        util/util.cpp
        util/stringProcessing.cpp
        util/Stemmer.cpp
        constraintSolver/ISREndDoc.cpp
        constraintSolver/tests/ISREndDocTests.cpp)

add_executable(ISROR-tests
        util/util.cpp
        constraintSolver/ISR.cpp
        constraintSolver/ISRWord.cpp
        constraintSolver/ISROr.cpp
        constraintSolver/tests/ISROrTests.cpp
        constraintSolver/ISREndDoc.cpp
        indexer/Corpus.cpp
        indexer/Chunk.cpp
        util/stringProcessing.cpp
        util/Stemmer.cpp )

add_executable(ISRAnd-tests
        constraintSolver/tests/ISRAndTests.cpp
        indexer/Corpus.cpp
        indexer/Chunk.cpp
        util/util.cpp
        constraintSolver/ISR.cpp
        constraintSolver/ISRWord.cpp
        constraintSolver/ISRAnd.cpp
        constraintSolver/ISREndDoc.cpp
        util/stringProcessing.cpp
        util/Stemmer.cpp )
add_executable(ISRWord-Multi-Test
        constraintSolver/tests/ISRWordMultiTest.cpp
        util/util.cpp
        constraintSolver/ISR.cpp
        constraintSolver/ISRWord.cpp
        constraintSolver/ISRAnd.cpp
        constraintSolver/ISREndDoc.cpp
        util/stringProcessing.cpp
        indexer/Corpus.cpp
        indexer/Chunk.cpp
        util/Stemmer.cpp )

add_executable(ISRMultiWordORTest
        constraintSolver/tests/ISRMultiWordORTest.cpp
        util/util.cpp
        constraintSolver/ISR.cpp
        constraintSolver/ISRWord.cpp
        constraintSolver/ISRAnd.cpp
        constraintSolver/ISREndDoc.cpp
        indexer/Corpus.cpp
        indexer/Chunk.cpp
        util/stringProcessing.cpp
        util/Stemmer.cpp )



add_executable(DataStructures-Vector-tests
        DataStructures/Vector/Vector.h
        DataStructures/Vector/VectorTests.cpp)

add_executable(DataStructures-HashTable-tests
        DataStructures/HashTable/HashTable.h
        DataStructures/HashTable/HashTableTests.cpp)

add_executable(DataStructures-q-DiskHashTable-tests
        DataStructures/DiskHashTable/DiskHashTable.h
        DataStructures/DiskHashTable/DiskHashTableTests.cpp)

add_executable(Indexer-twitter-tests
        DataStructures/DiskHashTable/MMDiskHashTable.h
        indexer/Indexer.cpp
        indexer/json.hpp
        util/stringProcessing.cpp
        util/Stemmer.cpp
        util/util.cpp
        indexer/IndexerTwitterTests.cpp indexer/WordInfo.h)

add_executable(MasterReader-tests
        DataStructures/DiskHashTable/MMDiskHashTable.h
        util/stringProcessing.cpp
        util/Stemmer.cpp
        util/util.cpp
        indexer/MasterReader.cpp
        )


add_executable(Corpus-tests

        indexer/tests/CorpusTests.cpp
        indexer/Corpus.cpp
        indexer/Chunk.cpp
        DataStructures/DiskHashTable/MMDiskHashTable.h
        util/stringProcessing.cpp
        util/Stemmer.cpp
        util/util.cpp
        )


add_executable(query-Ranker-tests
        query/Ranker/tests/RankerTest.cpp
        query/Ranker/Ranker.h
        query/Ranker/Scorer.h
        query/Ranker/Site.h
        query/Ranker/Ranker.cpp
        query/Ranker/Scorer.cpp
        query/Ranker/Site.cpp
        util/util.cpp
        constraintSolver/ISRWord.cpp
        constraintSolver/ISREndDoc.cpp
        util/stringProcessing.cpp
        util/Stemmer.cpp
        )
add_executable(testQueryLang
        query/queryLanguage/tests/testQueryParser.cpp
        query/queryLanguage/QueryParser.cpp
        util/DataStructureLib/tuple.cpp
        util/stringProcessing.cpp
        util/Stemmer.cpp
        indexer/Corpus.cpp
        indexer/Chunk.cpp

        )

add_executable(testISRQueryTuple
        query/queryLanguage/tests/queryIsrTest.cpp
        query/queryLanguage/QueryParser.cpp

        util/DataStructureLib/tuple.cpp
        util/stringProcessing.cpp
        util/Stemmer.cpp
        util/util.cpp
        constraintSolver/ISRContainer.cpp
        constraintSolver/ISR.h
        query/Ranker/Ranker.cpp
        query/Ranker/Site.cpp
        query/Ranker/Scorer.cpp
        constraintSolver/ISREndDoc.cpp
        constraintSolver/ISRWord.cpp
        constraintSolver/ISRAnd.cpp
        constraintSolver/ISROr.cpp

        )

add_executable(server
        site/LinuxTinyServer.cpp)

add_executable(query-queryLanguage-tests
        query/queryLanguage/QueryParser.cpp
        query/queryLanguage/QueryParser.h
        util/DataStructureLib/tuple.cpp
        )



find_package(OpenSSL REQUIRED)

target_link_libraries(TryPopTest OpenSSL::SSL)

target_link_libraries(ParserTest OpenSSL::SSL)

target_link_libraries(isolated-integration OpenSSL::SSL pthread)
target_link_libraries(url-frontier-test OpenSSL::SSL pthread)

target_link_libraries(crawler-parser-Test OpenSSL::SSL pthread)
target_link_libraries(crawler-parser-indexer-Test OpenSSL::SSL pthread)

target_link_libraries(QueueTest pthread)